如何使用Entity Framework为多对多关系表添加条目
如何使用Entity Framework为多对多关系表添加条目
我有一个包含三个表的数据库:Word
, Idiom
, WordIdiom
,它们存储这两个表之间的多对多关系。 WordItem
只包含 Word
和 Idiom
表的外键。
之后,我创建了基于数据库的实体模型。我填充了两个表相关的内容,现在我想在这些表之间添加交叉链接。
所以,我写了这段代码:
using (var db = new IdiomsDictionaryEntities()) { var allIdioms = from idiom in db.Idioms select idiom; foreach (var idiom in allIdioms) { string[] words = idiom.IdiomText.Split(new[] { " ", "-" }, StringSplitOptions.None); foreach (var word in words) { var wordItem = db.Words.SingleOrDefault(exWord => exWord.WordString.ToLower().Equals(word)); if (wordItem == null) { Console.WriteLine("Idiom: " + idiom.IdiomText + ", missing word: " + word); continue; } idiom.Words.Add(wordItem); db.SaveChanges(); } } }
但是当我运行这段代码时,我会得到以下错误:
类型为“System.Data.Entity.Infrastructure.DbUpdateException”的未处理异常发生于 EntityFramework.dll
附加信息: 保存未公开其关系的外键属性的实体时发生错误。该实体未公开其关系的外键属性,则 EntityEntries 属性将返回 null,因为无法将单个实体标识为异常源。公开实体类型中的外键属性可以简化保存时的异常处理。有关详细信息,请参阅 InnerException。
内部内部异常:
无法更新 EntitySet \'WordIdiomMatch\',因为它具有 DefiningQuery,且没有现行操作所需的与元素匹配的元素。
作为我第一次使用 Entity Framework,我真的不知道该如何解决这个问题。我尝试给 Entity Framework 模型添加 [ForeignKey()]
属性,但可能做错了。我还尝试为 WordIdiom
添加主键,但会破坏更多东西,因为在这种情况下,我甚至不能向 Word
和 Idiom
表添加项目。
admin 更改状态以发布 2023年5月21日