在asp.net Identity中自定義IdentityUser類時會創建可為空的字段

asp.net-identity ef-code-first entity-framework entity-framework-6

我試圖在asp.net身份中自定義IdentityUser類。

public class ApplicationUser : IdentityUser
{
    public ApplicationUser()
    {
        IsBlocked = false;
    }

    public bool IsBlocked { get; set; }
}

問題是:使用代碼優先遷移時,附加字段創建為可空。如果我刪除數據庫並重新創建它也是一樣的。

public class ApplicationUser : IdentityUser
{
    public ApplicationUser()
    {
        IsBlocked = false;
    }

    public bool IsBlocked { get; set; }
}

我怎樣才能解決這個問題?

我在同一個DbContext上的其他類中有布爾字段,並且它們都是非空的(因為它們應該)。

一般承認的答案

下面的原始答案假設您有一個抽象基類,因此使用TPC,或者如果您在具體類中指定[Table]屬性而不是TPH ,則可能使用TPT。

但是,如果您使用非抽象基類並且未在ApplicationUser上指定[Table] ,因此ApplicationUserIdentityUser映射到單個表,那麼您正在使用TPH方案。在這種情況下,子類中的任何字段都可以在單個表中為空。改變這種情況的唯一方法是切換到TPC或TPT。

原始答案

[Required]屬性放在您的屬性上:

[Required]
public bool IsBlocked { get; set; }

然後,您的遷移應該使其成為NON NULL列。

但是,如果表中已有數據,則會導致問題,因為它不知道要創建的默認值。在這種情況下,我編輯遷移,首先使其成為NULL列,然後運行Sql命令來設置我想要的值,然後AlterColumn使其成為NON NULL

[Required]
public bool IsBlocked { get; set; }



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因