C# Linq到SQL是否可以根据需要进行插入或更新?

C# Linq到SQL是否可以根据需要进行插入或更新?,c#,linq-to-sql,.net-3.5,C#,Linq To Sql,.net 3.5,我有一个分布式应用程序,它通过WCF将数据发送到要存储在数据库中的服务器(SQL server 2008) 通常这些数据是新的。所以我只做InsertAllOnSubmit() 但偶尔,由于与运行客户端的手持设备的通信异常,我会得到一个已经在服务器中的对象 有没有办法说InsertOrUpdateAllOnSubmit?或者我必须更改代码来遍历每个对象并检查它是否在数据库中,然后根据需要执行、插入或更新操作?我有很多对象类型,所以很快就会变得非常乏味:(更改数据库上的存储过程以处理重复项的插入。

我有一个分布式应用程序,它通过WCF将数据发送到要存储在数据库中的服务器(SQL server 2008)

通常这些数据是新的。所以我只做InsertAllOnSubmit()

但偶尔,由于与运行客户端的手持设备的通信异常,我会得到一个已经在服务器中的对象


有没有办法说InsertOrUpdateAllOnSubmit?或者我必须更改代码来遍历每个对象并检查它是否在数据库中,然后根据需要执行、插入或更新操作?我有很多对象类型,所以很快就会变得非常乏味:(

更改数据库上的存储过程以处理重复项的插入。

通常情况下,当您尝试执行任何类型的插入或更新时,如果存在冲突,例如对象已存在,则一旦检测到冲突,您将请求新数据并对其应用更新。这一切您可以灵活地决定哪些更改获胜,或者以某种方式提示用户让他们查看新数据并决定他们的数据是否获胜。这一切都取决于上下文和业务规则

这主要适用于更新,但如果您想一想为什么插入会发生这些冲突,您可能能够调整您的实现以使用并发检测和解决技术。

如何定义“复制”?相同的主键?是否为PKs使用标识列?@AaronLS-duplicate具有相同的主键(尽管我偶尔也会遇到唯一约束冲突)。由于我的数据来自许多设备,PK通常是GUID。因此,您可能不需要InsertOrUpdate,因为如果存在GUID冲突,您不会希望对现有记录进行更新?例如,我猜两个设备尝试插入完全不同的数据,但它们碰巧生成了相同的GUID,所以不进行更新对于第二条记录,您希望重新生成它的GUID,然后插入,以便两条记录都以唯一的PK添加到数据库中。也许您的场景与我想象的不同,但这正是我的想法。@AaronLS-我们的场景是设备发送数据,然后(出于某些原因,我们不确定)未得到服务器已获取数据的确认。我们认为,这些设备的连接使得在插入数据之前100%确保该设备已清除数据的工作变得更加困难。此外,我们需要数据,即使该设备不确定是否发送了数据。但是,无论哪种方式,如果该设备不能100%确保服务器获取了数据,它将在清除数据之前再次发送数据。因此,这不是GUID冲突的问题(这不太可能)。我没有支持此数据的存储过程。它只是使用Linq to SQL来执行数据插入。您可以附加一个存储过程来在Linq to SQL中执行插入/更新。您可以编写一个过程来执行插入和更新。这可能比在C#中更有效地处理重复项。同时请注意,如果您通过作为一个存储过程,您可以使用新的合并语法一次性执行插入和更新