C# 循环或多个级联路径多对多关系
我有课程销售,产品和场合。销售必须指单个产品,该产品可能有多个销售场合。客户可能只想在某些情况下购买产品。在我创建了产品和购买之间的一对多关系之后,我还想在销售和场合之间创建一个多对多关系,以跟踪销售项目中包括哪些场合。这些是课程C# 循环或多个级联路径多对多关系,c#,entity-framework,many-to-many,C#,Entity Framework,Many To Many,我有课程销售,产品和场合。销售必须指单个产品,该产品可能有多个销售场合。客户可能只想在某些情况下购买产品。在我创建了产品和购买之间的一对多关系之后,我还想在销售和场合之间创建一个多对多关系,以跟踪销售项目中包括哪些场合。这些是课程 public class Sale { [ForeignKey("ProductId")] public Product Product { get; set; } public int ProductId { get; set;
public class Sale
{
[ForeignKey("ProductId")]
public Product Product { get; set; }
public int ProductId { get; set; }
public Sale()
{
Occasions = new List<Occasion>();
}
public virtual ICollection<Occasion> Occasions { get; set; }
}
public class Occasion
{
[ForeignKey("ProductId")]
public Product Product { get; set; }
public int ProductId { get; set; }
public virtual ICollection<Sale> Sales{ get; set; }
}
public class Product
{
public virtual ICollection<Occasion> Occasions { get; set; }
}
公共类销售
{
[外键(“产品ID”)]
公共产品产品{get;set;}
public int ProductId{get;set;}
公开发售()
{
场合=新列表();
}
公共虚拟ICollection{get;set;}
}
公开课场合
{
[外键(“产品ID”)]
公共产品产品{get;set;}
public int ProductId{get;set;}
公共虚拟ICollection销售{get;set;}
}
公共类产品
{
公共虚拟ICollection{get;set;}
}
通过以下代码创建多对多关系
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Sale>().
HasMany(p => p.Occasions).
WithMany(o => o.Sale).
Map(
m =>
{
m.MapLeftKey("SaleId");
m.MapRightKey("OccasionId");
m.ToTable("SaleOccasions");
});
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()。
有很多(p=>p。
WithMany(o=>o.Sale)。
地图(
m=>
{
m、 MapLeftKey(“SaleId”);
m、 MapRightKey(“OccasionId”);
m、 ToTable(“销售机会”);
});
}
更新数据库会返回错误
在表“SaleOccasions”上引入外键约束“FK_dbo.SaleOccasions_dbo.Exceptions_OccasionId”可能会导致循环或多个级联路径
如果我从迁移中删除cascadeDelete:true
,我可以创建联接表并创建新条目,但是当我在删除对销售的引用后尝试删除销售时(sale.events.Remove(evence)
,对于与销售相关的所有场合),将抛出
DELETE语句与引用约束冲突
我想到了一个解决办法,完全放弃Sale和Exceptions之间的EF关系,而是在Sale中创建一个字符串属性,将场合id的列表更改为单个字符串,但我觉得这不是一个好的解决方案。有更好的解决办法吗