首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架-多对多

问实体框架-多对多
EN

Stack Overflow用户
提问于 2016-03-22 07:11:55
回答 2查看 114关注 0票数 1

我有一个包表,其中包含包裹的信息(承运商、重量..)。

我希望将产品与该软件包相关联,因此我执行了以下操作:

代码语言:javascript
复制
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表中,但这是一个多对多关系。如果可能,我如何维护packages表中的产品列表,同时让它知道它是多对多的?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-03-22 07:29:59

如果您希望打包与产品具有多对多关系,请添加此列表而不是列表

代码语言:javascript
复制
public virtual ICollection<Products> Products {get;set;}

在Product表中添加以下行

代码语言:javascript
复制
public virtual ICollection<Package> Packages {get;set;}

EF将创建一个名为ProductsPackages的新表。每一行代表彼此之间的一种关系。

票数 0
EN

Stack Overflow用户

发布于 2016-03-22 08:11:51

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

代码语言:javascript
复制
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");
                    });

}

自己创建表:

代码语言:javascript
复制
 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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36143354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档