多对多关系和唯一约束。我如何在 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});
}