C# 此EntitySet中已存在具有相同标识的实体。-WCF RIA服务
我有以下代码,我希望这些代码能够检查实体是否存在,如果不存在,则将其添加到集合中。然后,我在上下文中调用submitchanges来保存更改C# 此EntitySet中已存在具有相同标识的实体。-WCF RIA服务,c#,silverlight,wcf-ria-services,C#,Silverlight,Wcf Ria Services,我有以下代码,我希望这些代码能够检查实体是否存在,如果不存在,则将其添加到集合中。然后,我在上下文中调用submitchanges来保存更改 int kwID = (int)(from d in this._keywordSource.Source where d.keyword.ToLower() == searchText.ToLower() select d.keywordID).FirstOrDefault(); if ( null == this._context.Rules.Wher
int kwID = (int)(from d in this._keywordSource.Source where d.keyword.ToLower() == searchText.ToLower() select d.keywordID).FirstOrDefault();
if ( null == this._context.Rules.Where(e => e.keywordID == kwID && e.searchTerm == item.SearchTerm).FirstOrDefault())
{
this._context.Rules.Add(new Rule() { keywordID = kwID, searchTerm = item.SearchTerm, processed = false });
}
我用3个关键字/searchTerm组合来测试这一点:
苹果
iPad/iPad
iPod/iPod
第一次尝试从未运行.Add代码行。第二个成功。第三个抛出错误此EntitySet中已存在具有相同标识的实体。
我已经读到,这与标识和种子有关,特别是如果您的种子在db中为0。我的不是(设置为1)。EntitySet本身包含约1900个项目
我错过了什么
[编辑]
添加了kwID代码以显示关键字最终是条件中的kwID
此表的primaryKey是ruleID。这是我认为在错误消息中被违反的。。。。但我不知道如何或为什么 IMHO,错误的条件。
例子:
你的数据库中有:
- KWid:5,搜索词:iPod
- KWid:6,SearchTerm:iPad
- KWid:5,SearchTearm:GooglePhone
this.\u context.Rules.Where(e=>e.keywordID==5&&e.searchTerm==“GooglePhone”).FirstOrDefault()返回null,因此您尝试添加一个具有现有KWid的行
解决方案:将条件更改为(&C)||
if ( null == this._context.Rules.Where(e => e.keywordID == kwID || e.searchTerm == item.SearchTerm).FirstOrDefault())
我可能应该在我的代码块中输入关键字解析为kwID。现在更新以反映。很抱歉一个特定的kwIDOk可以有多个搜索词。你注意到iPad/iPad实体的RuleId了吗?奇怪的是,它们已经在我的数据库中了,所以我不知道为什么会这样。我对EF比较陌生。。。