有没有办法说一个条目在 2 个列值中是唯一的?

Hui Liu-MSFT 48,711 信誉分 Microsoft 外部员工
2024-04-01T07:53:39.8733333+00:00

我的问题是在实体框架与 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?

开发人员技术 | .NET | Entity Framework Core
0 个注释 无注释
{count} 票

问题作者接受的答案
  1. 匿名
    2024-04-01T08:08:23.24+00:00

    您可以尝试以下两种方法来使用 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 不是主键。

    用户图像


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

提问者可以将答案标记为“已接受”,版主可以将答案标记为“已推荐”,这有助于用户了解答案是否解决了提问者的问题。