【问题标题】:System.Data.Linq.DuplicateKeyException: Cannot add an entity with a key that is already in useSystem.Data.Linq.DuplicateKeyException:无法使用已在使用的键添加实体
【发布时间】:2011-02-08 16:50:03
【问题描述】:

我的是 Windows 应用程序。我正在尝试通过 LINQ DataContext 插入记录。它在表中具有唯一标识符。即使我在插入后执行触发器。所以我在触发器结束时进行选择查询以获取自动生成器编号并避免自动同步错误。因为它是一个 Windows 应用程序,所以我可以长时间保留上下文。当我创建一个新对象(例如订单)并执行相同的先前操作时,在 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:无法使用已在使用的键添加实体。

谢谢。

【问题讨论】:

    标签: linq insert duplicates unit-of-work


    【解决方案1】:

    看看这个问题,它处理您的异常并提出解决方案:

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

    【讨论】:

      猜你喜欢
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多