如何通过Fluent API Entity Framework定义多对多关系?
如何通过Fluent API Entity Framework定义多对多关系?
以下是我的模型:
public class TMUrl { //许多其他属性 //只有一个属性的类型为Keyword public ListKeywords{get;set;} } public class Keyword { //许多其他属性 //只有一个属性的类型为TMUrl public List Urls{get;set;} }
很明显,这两个实体之间存在多对多的关系。
我选择使用流畅的API来告诉实体框架这种关系,即:
modelBuilder.Entity.HasMany(s => s.Keywords) .WithMany(s => s.URLs).Map(s => { s.MapLeftKey("KeywordId"); s.MapRightKey("UrlId"); s.ToTable("KeywordUrlMapping"); });
但是当我执行以下操作时:
url.Keywords.Add(dbKey); //其中url是TMUrl对象,dbKey是一个现有/新的Keyword对象 db.SaveChanges();
我得到了异常:
在保存不公开其关系的外键属性的实体时发生错误....
内部异常:
INSERT 语句与 FOREIGN KEY 约束“KeywordMaster_Keyword”冲突,冲突发生在数据库“DbName”、表“dbo.KeywordMaster”、列“Id”上。该语句已终止。
但是当我同时从另一侧添加配置时,一切正常运行。
即:
modelBuilder.Entity.HasMany(s => s.URLs) .WithMany(s => s.Keywords) .Map(s => { s.MapLeftKey("KeywordId"); s.MapRightKey("UrlId"); s.ToTable("KeywordUrlMapping"); });
为什么?为什么我必须从两个实体中都添加配置,我在这里和其他许多地方读到,只需要为其中一个实体添加配置。
什么情况下,我应该为参与关系的两个实体都添加配置?
我需要理解这个。为什么。请帮助。