我在一个简单的费用记录应用程序中使用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;
}
我整个上午一直在努力,这让我感到愚蠢。我很乐意提供任何帮助。
答案 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,更新服务器资源管理器,然后重新添加。
至少这是我收到此错误时所做的事情。它通常显示在编译后在数据库上设置标识列的时候。