繁体   English   中英

实体框架 - 多对多

[英]Entity Framework - many to many

我有一个Packages表,其中包含有关包(载体,重量......)的信息。

我想为该软件包关联产品,所以我做了以下事情:

public class Package
{
    public int ID { get; set; }
    public Order Order { get; set; }
    public int Weight { get; set; }
    public List<Product> Products { get; set; }
}

发生的事情是它将package_id添加到products表中,但这是一个多对多的关系。 如果可能的话,我如何维护包表中的产品列表,但是它知道它是多对多的?

谢谢。

如果您希望Package与产品有多对多的关系,请添加此而不是List

public virtual ICollection<Products> Products {get;set;}

在Product表中添加此行

public virtual ICollection<Package> Packages {get;set;}

EF将创建一个名为ProductsPackages的新表。 每一行代表一个相互关联的关系。

实体框架中的多对多关系是使用联结表创建的。 您可以通过映射关系来创建它们,也可以自己创建联结表。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

modelBuilder.Entity<Package>()
            .HasMany<Product>(s => s.Products)
            .WithMany(c => c.Packages)
            .Map(cs =>
                    {
                        cs.MapLeftKey("PackageRefId");
                        cs.MapRightKey("ProductRefId");
                        cs.ToTable("PackageProduct");
                    });

}

自己创建表:

 public class PackageProduct
 {
    public virtual Package Package { get; set; }
     public virtual Product Product { get; set; }
 }

吉米·博加德(Jimmy Bogard)讨论了使用哪种方法: https//lostechies.com/jimmybogard/2014/03/12/avoid-many-to-many-mappings-in-orms/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM