gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:15:10 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com