与代码优先的实体框架的一对多关系

时间:2016-01-10 04:40:07

标签: c# entity-framework ef-code-first

我正在尝试使用代码优先的实体框架建立一对多关系(我认为)。

我有一个ProductListing对象,可以有许多关联的Country对象。我以为我已经正确设置了它,但我的Countries表有ProductListing的参考列。这是一个问题,因为虽然ProductListing可能与Country有关系,但Country对象不应该知道或依赖于ProductListing对象。

ProductListing

public class ProductListing : AuditedEntity<long>
{
    public long ProductId { get; set; }
    public Product Product { get; set; }

    public long RetailerId { get; set; }
    public Retailers.Retailer Retailer { get; set; }

    public ICollection<Countries.Country> Countries { get; set; }

    public bool IsOfficial { get; set; }

    public decimal CurrentPrice { get; set; }
    public decimal PreviousPrice { get; set; }

    public string ListingUrl { get; set; }
    public string AffiliateString { get; set; }

    public DateTime? ReleaseDate { get; set; }
    public DateTime? ShipDate { get; set; }
    public DateTime? ExpiresDate { get; set; }
}

国家

public class Country : AuditedEntity<long>
{
    [Required]
    [StringLength(ShylockConsts.MaxNameLength)]
    public virtual string Name { get; set; }

    [Required]
    [StringLength(ShylockConsts.MaxIsoLength)]
    public virtual string IsoCode { get; set; }
}

2 个答案:

答案 0 :(得分:1)

您实际拥有的是public class ProductCountry { [Required] public virtual long ProductID { get; set; } [Required] public virtual long CountryID { get; set; } } 关系,其中产品可以包含多个国家/地区,而国家/地区可以包含多个产品。

要对此进行建模,您需要一个中间连接表来保存每个产品的国家/地区。

例如

delegated

答案 1 :(得分:1)

将一个集合nav属性添加到Country实体,以模拟多对多关系,如@Steve所说(但不需要在概念模型中为联结表创建实体)

public class ProductList : ...
{
    public ICollection<Country> Countries { get; set; }
}

public class Country : ...
{
    public ICollection<ProductListing> ProductListings { get; set; }
}