c# - EF Core - 添加唯一索引

标签 c# asp.net-core entity-framework-core

我正在对国家和城市进行 CRUD,我正在尝试向 City.Name 添加唯一索引。

我已经对 Country.Name 这样做了,我想知道是否可以对一个城市这样做,以便 2 个国家/地区的 2 个城市可以具有相同的名称,但在 1 个国家/地区,不能有任何城市具有重复的名字。

国家级

public int Id { get; set; }

[Required]
public string Name { get; set; }

public ICollection<City> Cities { get; set; }

城市等级

public int Id { get; set; }

[Required]
public string Name { get; set; }

当我创建一个城市时,我使用这个 ViewModel

城市景观模型

public int CountryId { get; set; }


public int CityId { get; set; }


[Required]
public string Name { get; set; }

OnModelCreating

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
     modelBuilder.Entity<Country>().HasIndex(c => c.Name).IsUnique();

     base.OnModelCreating(modelBuilder);
}

示例

假设我有 2 个国家/地区加拿大和澳大利亚,在加拿大境内我有 1 个名为悉尼的城市。

如果我尝试创建或编辑另一个国家以使其命名为加拿大或澳大利亚,我希望它给出一个错误。

如果我尝试创建或编辑另一个城市以将其命名为悉尼,如果该城市是在澳大利亚国家/地区创建的,则不应出现错误,但如果它是在加拿大国家/地区创建的,则应该会出现错误。

希望对你有帮助。

最佳答案

您将需要 2 个唯一索引。

为了防止多个国家拥有相同的名字,你需要在它的名字中有一个唯一的索引:

modelBuilder.Entity<Country>().HasIndex(c => c.Name ).IsUnique();

如果你还想防止同一个国家的多个城市有相同的名字,假设你在城市表中有一个国家ID(或代码),你可以在多个列上创建索引:

modelBuilder.Entity<City>().HasIndex(c => new { c.Name, c.CountryId }).IsUnique();

关于c# - EF Core - 添加唯一索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63803554/

相关文章:

c# - 使用 Json.Net 处理数据中的换行符

c# - 更新失败 - Entity Framework Core

c# - 无法加载文件或程序集 '<project name>, Culture=neutral, PublicKeyToken=null'。有人建议修复吗?

c# - 如果为空则为空字符串

asp.net-core - 带有 anchor 标记助手的命名路由

c# - Odata $expand 不适用于特定查询

visual-studio - 为什么在 Visual Studio 中结束调试后我的 docker 容器 ASP.NET 核心应用程序不可用

Azure 服务总线事务发件箱模式的替代方案

c# - Entity Framework 核心 ObjectContext.Refresh 等效项

c# - 在 Visual Studio 中添加新数据项时 EF 6.x DbContext 生成器选项的用途