2011-02-08 79 views
1

mine是windows应用程序。我试图通过LINQ DataContext插入一条记录。它在表中具有唯一标识符。即使我在插入后执行触发器。所以我在触发器的末尾做了一个选择查询来获取自动生成器号码并避免自动同步错误。因为它是一个Windows应用程序,我可以长期保持上下文。当我创建一个新的对象(例如订单)并执行相同的以前操作时,在SubmitChanges操作时,它显示不能有重复的键。我不能使用相同的上下文插入第二条记录吗?还是我需要创建一个新的上下文来插入新的记录?(这个工作单元的概念来到这里吗?)。创建新的上下文是个坏主意,因为我需要重新加载所有数据。System.Data.Linq.DuplicateKeyException:无法使用已经使用的密钥添加实体

任何想法?

让我放一些代码示例来表达我的情况。

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(); 

正如我上面提到的,这是公开售票按钮点击窗口形式。我更改该表单上可用的文本框中的fname,lname和全部值,并单击相同的按钮。所以它会再次调用相同的方法。我得到下面指定的错误。 System.Data.Linq.DuplicateKeyException:不能使用已在使用的键添加实体。

谢谢。

回答