繁体   English   中英

Linq To Sql中的更新

[英]Updates in Linq To Sql

对于更新记录,我们目前使用的代码对现有行集执行DeleteAllOnSubmit,对新行集执行InsertAllOnSubmit,而不是查询上下文并分别更新每个记录。 这对于我们大多数情况都可以正常工作,就像插入/删除同一行(内容)一样,即使在ChangeSet中有插入和删除操作,也将其删除。 另外,如果主键相同,并且记录的内容不同,它将主键转换为单个更新。 我们遇到的问题是主键以不区分大小写的方式进行匹配,例如说“ abc”和“ Abc”,Linq认为它们是不同的键,然后尝试先运行插入操作,然后先执行删除操作,由于主键操作失败违反,因为对于我们的数据库设置,两个主键被视为相等。 当它从ChangeSet中的插入和删除确定更新时,有没有办法使Linq使用不区分大小写的比较?

我知道另一种方法是查询数据库,如果存在记录,则执行更新而不是插入和删除。 但是我们确实对多个对象具有这种逻辑,并且我们想看看是否还有其他可行的选择。

感谢您的答复。

让我尝试用一​​个例子来解释这个问题。

假设我们有两个表,一个银行和一个分支,其中一个银行可以有多个分支。

我们为表提供了一组需要设置的分支。 因此,逻辑是删除该银行的所有分支并将其设置为我们拥有的分支集合。

当前的代码可以执行某些操作

DataContext dc = new DataContext();

var destBranches = dc.Branches.Where(b => b.BankID.Equals("123"));

dc.Users.DeleteAllOnSubmit(destBranches);
dc.Branches.InsertAllOnSubmit(branches);

如果使用更新路由,则对于每个分支,我们必须查看它是否存在于dest中,然后修改其属性,如果不插入它,最后,如果分支集中没有任何dest分支,则将其删除。 我们有很多表需要进行此更改。

如果您有SQL 2008,请考虑使用MERGE语句。 一键执行更新/插入。 SQL 2008的proc也接受表值参数,这会使它变得微不足道。

您也可以尝试Plinqo 它为您完成所有的批处理更新工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM