System.Data.Linq.DuplicateKeyException:无法添加具有已在使用的键的实体

时间:2011-02-08 16:50:03

标签: linq insert duplicates unit-of-work

我是windows应用程序。我试图通过LINQ DataContext插入记录。它在表中有唯一标识符。即使我在插入后执行触发器。所以我在触发器的末尾进行选择查询以获取自动生成器编号并避免自动同步错误。因为它是一个Windows应用程序,我可以长时间保持上下文。当我创建一个新对象(例如顺序)并执行相同的先前操作时,在SubmitChanges操作时,它显示不能有重复键。我不能使用相同的Context来插入第二条记录吗?或者我是否需要创建一个新的Context来插入一个新记录?(这个工作单元概念是否来到这里?)。创建新上下文是个坏主意,因为我需要再次加载所有数据..

有什么想法吗?

让我说一些代码示例来说明我的情况。

CallCenterLogObjCotext = (CallCenterLogObjCotext == null ? (new CallcenterLogContext) : (CallCenterLogObjCotext));

CallDetail newCallDetailsOpenTicket = new CallDetail();

newCallDetailsOpenTicket.CallPurpose = (from callpuposelist in CallCenterLogObjCotext.CallPurposes where callpuposelist.CallPurposeID == ((CallPurpose)(cbcallpurpose.SelectedItem)).CallPurposeID select callpuposelist).FirstOrDefault();

很多像这样的设置......

CallCenterLogObjCotext.CallDetails.InsertOnSubmit(newCallDetailsOpenTicket); CallCenterLogObjCotext.SubmitChanges();

正如我上面提到的,这是点击Windows窗体上的Open Ticket按钮。我在该表单上的可用文本框中更改了fname,lname和all的值,然后单击了相同的按钮。所以它会再次调用相同的方法。我得到以下指定的错误。 System.Data.Linq.DuplicateKeyException:无法添加具有已在使用的密钥的实体。

感谢。

1 个答案:

答案 0 :(得分:0)

看看这个问题,它会处理您的例外并提出解决方案:

ON INSERT: Cannot add an entity with a key that is already in use