无法添加已存在的标识

时间:2011-08-24 04:07:49

标签: linq-to-sql

我在一个简单的费用记录应用程序中使用C#4.0。我正在尝试保存到具有自动递增id字段的表,设置为主键。我第一次使用它时工作正常,但第二次和以后的时间,我得到“无法添加已存在的身份”错误。

这是我遇到问题的代码

public bool SaveClaim(Claim newClaim, bool blNew)
{
    bool blSuccess = true;
    try
    {
        expContext.Claims.InsertOnSubmit(newClaim);
        expContext.SubmitChanges();
        claim = null;
    }
    catch (Exception e)
    {
        blSuccess = false;
        MessageBox.Show(e.ToString());
    }
    return blSuccess;
}

我整个上午一直在努力,这让我感到愚蠢。我很乐意提供任何帮助。

3 个答案:

答案 0 :(得分:1)

也许您正在尝试使用 INSERT 方法 UPDATE newClaim。

如果newClaim有ID,方法expContext.Claims.InsertOnSubmit(newClaim)正在尝试插入具有该ID的记录。这可能是个问题。

if (blNew)
    expContext.Claims.InsertOnSubmit(newClaim);
else
    expContext.Claims.UpdateOnSubmit(newClaim); //-- Assumed method

其他

这是一个有用的主题:MSDN Forums

if (blNew)
{
        expContext.Claims.InsertOnSubmit(newClaim);
}

答案 1 :(得分:1)

确保您在dbml中为Claim的标识列设置了以下属性:

自动生成的值= true

自动同步= OnInsert

同时确保新的Claim对象实际上是一个新对象,而不是重复使用之前添加的对象。

答案 2 :(得分:1)

也许你应该尝试更新你的设计师。 删除表Claim,更新服务器资源管理器,然后重新添加。

至少这是我收到此错误时所做的事情。它通常显示在编译后在数据库上设置标识列的时候。