我一定缺少一些琐碎的东西。我认为这是我第一次遇到这种情况。

我用一些基本数据扩展了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(即nullable)也不是。这将导致以下自动生成的代码:
CreateTable(
    "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类继承的DiscriminatorIdentityUser列。为什么我的[Required]属性被忽略?

最佳答案

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

Table per typetable per concrete type

08-27 07:43