您已经定义了
ID
列作为
identity column
它被认为是您的主键,并且在您的表中插入新记录时会增加一个。这就是允许您插入重复实体的原因。您需要指定哪些列需要声明为pk,如果您使用的是代码优先方法,那么可以在模型中使用
Data Annotation
,如下所示:
[Key]
public string FirstName { get; set; }
或者通过使用唯一约束:
[Index("IX_UniqueConstraint", 1, IsUnique = true)]
public string FirstName { get; set; }
[Index("IX_UniqueConstraint", 2, IsUnique = true)]
public string LastName { get; set; }
[Index("IX_UniqueConstraint", 3, IsUnique = true)]
public DateTime DateOfBirth { get; set; }
您也可以使用
fluent API
为此目的:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Persons>().HasKey(c => new { c.FirstName, c.LastName, c.DateOfBirth });
}
或者,如果您使用的是DBFirst方法,那么您可以在数据库中声明它。