我正在对国家和城市进行 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/