我必须遗漏一些微不足道的东西。我想这是我第一次遇到这个问题。
我使用一些基本数据扩展了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]
列。为什么我的{{1}}属性会被忽略?
答案 0 :(得分:4)
您正在使用继承,EF默认使用table per hierarchy实现。 IdentityUser
和ApplicationUser
将存储在同一个表中。但是IdentityUser
没有FirstName
或LastName
属性,因此数据库中的字段必须可以为空。如果这对您来说是个问题,那么您需要使用其他策略之一: