多对多关系和唯一约束。我如何在 EF Core 中执行此操作?
Many-to-many relation and unique constraint. How do I do that in EF Core?
我有两个实体 Country 和 Business。
public class Country
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Business> Businesses { get; set; }
public Country()
{
Businesses = new List<Business>();
}
}
public class Business
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Country> Countries { get; set; }
public Business()
{
Countries = new List<Country>();
}
}
一个国家可以有很多企业,企业可以存在于许多国家。企业在一个国家内应该是独一无二的。
如何在多对多关系中使 Business 对国家/地区唯一?
您可以使用复合键完成此操作。
首先你需要第三个实体来代表协会:
public class CountryBusiness {
public int CountryId {get; set;}
public Country Country {get; set;}
public int BusinessId {get; set;}
public Business Business {get; set;}
}
然后,您需要在 DbContext 中给它一个复合键 class:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<CountryBusiness>().HasKey(cb => new {cb.CountryId, cb.BusinessId});
}
我有两个实体 Country 和 Business。
public class Country
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Business> Businesses { get; set; }
public Country()
{
Businesses = new List<Business>();
}
}
public class Business
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Country> Countries { get; set; }
public Business()
{
Countries = new List<Country>();
}
}
一个国家可以有很多企业,企业可以存在于许多国家。企业在一个国家内应该是独一无二的。
如何在多对多关系中使 Business 对国家/地区唯一?
您可以使用复合键完成此操作。
首先你需要第三个实体来代表协会:
public class CountryBusiness {
public int CountryId {get; set;}
public Country Country {get; set;}
public int BusinessId {get; set;}
public Business Business {get; set;}
}
然后,您需要在 DbContext 中给它一个复合键 class:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<CountryBusiness>().HasKey(cb => new {cb.CountryId, cb.BusinessId});
}