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

Hui Liu-MSFT 41,146 信誉分 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?

Entity Framework Core
Entity Framework Core
实体框架数据访问技术的轻量型、可扩展、开源、跨平台版本。
42 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jiale Xue - MSFT 35,556 信誉分 Microsoft 供应商
    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 个其他答案

排序依据: 非常有帮助