0

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

任何想法?

一些代码示例来解释我的情况:

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:无法使用已在使用的键添加实体。

4

1 回答 1

1

您可以使用相同的上下文对象插入多行,请参阅http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspxhttp: //msdn.microsoft.com/en-us/library/bb425822.aspx和其他众多在线示例。重复键问题可能是 linq to sql 配置问题,或者是数据库完整性错误,例如,如果您在表上有一个自然主键并且试图多次插入具有相同自然主键的行。

于 2011-02-05T20:03:20.153 回答