我正在对国家和城市进行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
CityViewModel
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个城市,名为悉尼。
如果我尝试创建或编辑另一个国家,以便将其命名为Canada或Australia,我希望它给出错误信息。
如果我尝试创建或编辑另一个城市,以便将其命名为悉尼,则如果该城市在澳大利亚国家/地区中创建,则不应给出错误,但如果在加拿大国家/地区中创建,则应给出错误。 / p>
我希望这会有所帮助。
答案 0 :(得分:5)
您将需要2个唯一索引。
为防止多个国家使用相同的名称,您需要在其名称中使用唯一索引:
modelBuilder.Entity<Country>().HasIndex(c => c.Name ).IsUnique();
如果您还想防止同一个国家的多个城市具有相同的名称,并假设在“城市”表中有一个国家/地区ID(或代码),则可以在多个列上创建索引:
modelBuilder.Entity<City>().HasIndex(c => new { c.Name, c.CountryId }).IsUnique();