【发布时间】:2015-12-30 23:12:54
【问题描述】:
我有一个包含三个表的数据库: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();
}
}
}
但是当我运行这段代码时,我得到了以下错误:
EntityFramework.dll 中出现“System.Data.Entity.Infrastructure.DbUpdateException”类型的未处理异常
附加信息:保存不为其关系公开外键属性的实体时发生错误。 EntityEntries 属性将返回 null,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地处理保存时的异常。有关详细信息,请参阅 InnerException。
内-内异常:
无法更新 EntitySet 'WordIdiomMatch',因为它有一个 DefiningQuery 并且元素中不存在支持当前操作的元素。`
因为这是我第一次使用 Entity Framework,我真的不知道如何解决这个问题。我试图将[ForeignKey()] 属性添加到实体框架模型,但可能做错了。我还尝试为WordIdiom 添加主键,但它会阻止更多事情,因为在这种情况下,我什至无法将项目添加到Word 和Idiom 表中。
【问题讨论】:
标签: entity-framework sqlite foreign-keys many-to-many foreign-key-relationship