我一定缺少一些琐碎的东西。我认为这是我第一次遇到这种情况。
我用一些基本数据扩展了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; }
}
注意,
FirstName
和LastName
是必需的,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
类继承的Discriminator
和IdentityUser
列。为什么我的[Required]
属性被忽略? 最佳答案
您正在使用继承,并且EF默认情况下使用table per hierarchy来实现。 IdentityUser
和ApplicationUser
将存储在同一表中。但是IdentityUser
没有FirstName
或LastName
属性,因此数据库中的字段必须为空。如果这对您来说是个问题,则需要使用其他策略之一:
Table per type或table per concrete type