0

私は、国とビジネスの2つのエンティティを持っています。多対多リレーションシップと一意制約。 EFコアではどうしたらいいですか?

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>(); 
     } 
    } 

国内には多くのビジネスがあり、多くの国ではビジネスが存在します。ビジネスは国内で一意でなければなりません。

多対多の関係でビジネスを一意にする方法を教えてください。

答えて

2

複合キーを使用してこれを実行できます。

まずあなたが関連を表現する第3のエンティティが必要になります。

public class CountryBusiness { 
    public int CountryId {get; set;} 
    public Country Country {get; set;} 

    public int BusinessId {get; set;} 
    public Business Business {get; set;} 
} 

その後、あなたはそれをあなたのDbContextクラスで複合キーを与える必要があります。

protected override void OnModelCreating(ModelBuilder builder) 
{ 
    base.OnModelCreating(builder); 
    builder.Entity<CountryBusiness>().HasKey(cb => new {cb.CountryId, cb.BusinessId}); 
} 
関連する問題