Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq to sql LINQtoSQL是否只支持单个工作单元,或者我是否可以持久化上下文并执行下一个操作?_Linq To Sql_Duplicates_Unit Of Work - Fatal编程技术网

Linq to sql LINQtoSQL是否只支持单个工作单元,或者我是否可以持久化上下文并执行下一个操作?

Linq to sql LINQtoSQL是否只支持单个工作单元,或者我是否可以持久化上下文并执行下一个操作?,linq-to-sql,duplicates,unit-of-work,Linq To Sql,Duplicates,Unit Of Work,我有一个windows应用程序。我试图通过DataContext插入一条记录。它在表中具有唯一标识符。甚至我在插入后执行触发器。因此,我在触发器末尾进行一个select查询,以获取自动生成器编号并避免自动同步错误。因为它是windows应用程序,所以我可以长期保留上下文。当我创建一个新对象(例如order)并执行与前面相同的操作时,SubmitChanges操作显示不能有重复的密钥。为什么不能使用相同的上下文插入第二条记录?或者我需要创建一个新的上下文来插入一个新的记录吗?(这个工作单元的概念在

我有一个windows应用程序。我试图通过DataContext插入一条记录。它在表中具有唯一标识符。甚至我在插入后执行触发器。因此,我在触发器末尾进行一个select查询,以获取自动生成器编号并避免自动同步错误。因为它是windows应用程序,所以我可以长期保留上下文。当我创建一个新对象(例如order)并执行与前面相同的操作时,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窗体上的单击打开票证按钮。我在表单上可用的文本框中更改fname、lname和all的值,然后单击相同的按钮。 因此,它将再次调用相同的方法。我得到以下指定的错误:

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


可以使用同一上下文对象插入多行,请参见和其他许多联机示例。重复键问题可能是linq到sql配置问题,也可能是数据库完整性错误,例如,如果表上有一个自然主键,并且尝试多次插入具有相同自然主键的行