Entity Framework Core
实体框架数据访问技术的轻量型、可扩展、开源、跨平台版本。
49 个问题
我的问题是在实体框架与 SQL 数据库通信的上下文中。
我有一个班级如下:
public class County
{
public int Id { get; set; }
public string Name { get; set; }
public int StateId { get; set; }
public State State { get; set; }
}
我为每个州的每个县都有一条这样的记录。这个名字并不是唯一的,因为加利福尼亚州和佛罗里达州都有一个奥兰治县。但是,Name + StateId 的组合是唯一的。
有没有办法在实体框架中指定这一点,以便它告诉 SQL 数据库强制实施该唯一性?
Note:此问题总结整理于:Is there a way to say an entry is unique across 2 column values?
您可以尝试以下两种方法来使用 fluent api 使列对唯一。
首先,我们需要在我的班级中做出一些改变:
然后,我们可以使用以下两种方法来做到这一点。
public class County
{
public int Id { get; set; }
[Column(Order = 0)]
public string? Name { get; set; }
[Column(Order = 1)]
public int StateId { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//modelBuilder.Entity<County>().HasKey(x => new { x.Name, x.StateId }); //First method
modelBuilder.Entity<County>().HasIndex(x => new { x.Name, x.StateId }).IsUnique(); // Second method
}
另外,为了验证,Id 将仍然是主键 - 正确吗?
不,根据我的测试,Id 不是主键。
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。
注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。