我在使用新的 Entity Framework 4.1 时遇到问题。几天前我开始测试它,我对整个 POCO 概念和这个新 API 仍然很陌生。
无论如何,在做一些编码时,我创建了这样的东西:
public Tag GetTagWithName(string name)
{
if (db.Tags.SingleOrDefault(q => q.Name == name) == null)
{
return new Tag { Name = name };
}
else
{
return db.Tags.SingleOrDefault(q => q.Name == name);
}
}
如果 Tag this 这样的名称已经存在,则应该检查数据库,并且我在这段代码中使用了这个函数:
if (tags != null)
{
foreach (HtmlNode tagNode in tags)
{
string tagString = tagNode.InnerText.Remove(0, 1);
Tag tag = TagRep.GetTagWithName(tagString);
pic.Tags.Add(tag);
}
}
if (context.Pictures.Any(q => q.Link == pic.Link))
{
continue;
}
else
{
context.Pictures.Add(pic);
}
context.SaveChanges();
这基本上是为新创建的照片添加标签,检查照片是否已经在数据库中,而不是将其添加到数据库中,并在每张照片之后调用 SaveChanges()。
好吧,我的问题是,在执行函数 GetTagWithName 期间,在获取“SingleOrDefault”时会导致错误“序列包含多个元素”,这不应该发生,因为我在添加任何新标签之前检查了整个数据库,使用此函数进行检查如果标签已经在数据库中。
从我在代码中看到的情况来看,发生这种情况的原因是,即使我将我从数据库中获取的 Tag 对象添加到 Picture 中,它稍后仍会将其作为新对象添加到 Tags 表中。
对此有什么解释吗?