EF Migration忽略字符串属性的[Required]属性并创建可为空的字段

时间:2014-01-26 12:52:07

标签: entity-framework asp.net-mvc-5 ef-migrations

我必须遗漏一些微不足道的东西。我想这是我第一次遇到这个问题。

我使用一些基本数据扩展了ApplicationUser : IdentityUser类。其中一些是必需的,一些是可选的。简化的摘录:

public class ApplicationUser : IdentityUser
{
    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }

    [Column(TypeName = "Date")]
    public DateTime? BirthDate { get; set; }

    public string NationalNumber { get; set; }
}

请注意,FirstNameLastName是必需的,NationalNumber不是。 BirthDate nullableCreateTable( "dbo.AspNetUsers", c => new { Id = c.String(nullable: false, maxLength: 128), UserName = c.String(), PasswordHash = c.String(), SecurityStamp = c.String(), FirstName = c.String(), LastName = c.String(), BirthDate = c.DateTime(storeType: "date"), NationalNumber = c.String(), Discriminator = c.String(nullable: false, maxLength: 128), }) .PrimaryKey(t => t.Id); ,也不是。这导致以下自动生成的代码:

nullable: false

创建为Id的唯一列是从Discriminator类继承的IdentityUser[Required]列。为什么我的{{1}}属性会被忽略?

1 个答案:

答案 0 :(得分:4)

您正在使用继承,EF默认使用table per hierarchy实现。 IdentityUserApplicationUser将存储在同一个表中。但是IdentityUser没有FirstNameLastName属性,因此数据库中的字段必须可以为空。如果这对您来说是个问题,那么您需要使用其他策略之一:

Table per typetable per concrete type