我有一个包表,其中包含包裹的信息(承运商、重量..)。
我希望将产品与该软件包相关联,因此我执行了以下操作:
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表中的产品列表,同时让它知道它是多对多的?
谢谢。
发布于 2016-03-22 07:29:59
如果您希望打包与产品具有多对多关系,请添加此列表而不是列表
public virtual ICollection<Products> Products {get;set;}在Product表中添加以下行
public virtual ICollection<Package> Packages {get;set;}EF将创建一个名为ProductsPackages的新表。每一行代表彼此之间的一种关系。
发布于 2016-03-22 08:11:51
实体框架中的多对多关系是通过连接表创建的。您可以通过映射关系来使用创建连接表,也可以自己创建连接表。
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/
https://stackoverflow.com/questions/36143354
复制相似问题