此EntitySet中已存在具有相同标识的实体。 - WCF RIA服务

时间:2011-10-22 22:00:45

标签: c# silverlight wcf-ria-services

我有以下代码,我希望检查是否存在实体,如果不存在,则将其添加到集合中。然后,我在上下文中调用提交更改以保存更改。

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代码行。第二个成功了。第三个引发错误An entity with the same identity already exists in this EntitySet.

我读过这与身份和身份有关。种子,特别是如果你的种子在数据库中为0。我不是(设置为1)。 EntitySet本身有~1900个项目。

我在这里缺少什么?

[编辑] 添加了kwID代码以显示关键字最终是条件中的kwID。

此表的primaryKey是ruleID。这是我认为在错误消息中被违反的内容....但我不知道如何或为什么。

1 个答案:

答案 0 :(得分:0)

恕我直言,错误的情况。 例: 你已经进入了数据库:

  • KWid:5,SearchTerm:iPod
  • KWid:6,SearchTerm:iPad

在你的情况下,你把价值

  • KWid:5,SearchTearm:GooglePhone

this._context.Rules.Where(e => e.keywordID == 5 && e.searchTerm == "GooglePhone").FirstOrDefault()返回null,因此你尝试添加一个包含现有KWid的行。

解决方案:改变&&条件到||

if ( null == this._context.Rules.Where(e => e.keywordID == kwID || e.searchTerm == item.SearchTerm).FirstOrDefault())