在没有首先在LINQ 2 SQL中选择数据的情况下更新?

时间:2008-12-30 02:27:03

标签: .net linq-to-sql .net-3.5

如何更新记录而无需先在LINQ中选择数据?

因为必须首先执行linq select(显然调用昂贵的SQL SELECT),更改所需的属性,然后执行SubmitChanges()。我希望避免这种情况,只是执行SQL UPDATE,我已经知道了ID。

4 个答案:

答案 0 :(得分:1)

您需要使用Attach方法将断开连接的实体“附加”到您的表中。 MSDN上的这篇文章概述了如何使用它:

Data Retrieval and CUD Operations in N-Tier Applications

答案 1 :(得分:1)

我还没有尝试过,但看起来好像你可以用Attach:

来做到这一点

Table(TEntity).Attach Method (TEntity, Boolean)

您将对象设置为更新状态并将其传入,将布尔参数设置为true。当然,那么你必须设置所有字段,而不仅仅是你想要改变的字段。

如果您只想更改一个或两个字段,可以使用DataContext对象上的ExecuteCommandExecuteQuery方法直接调用SQL。您必须将SQL作为字符串传递,并为SQL中的每个参数传递一个参数。请特别注意如何构造SQL字符串:

  

命令的语法差不多   与用于创建的语法相同   一个ADO.NET DataCommand。唯一的   不同之处在于如何参数   是指定的。具体来说,你   通过将它们括起来指定参数   在大括号({...})中并枚举它们   从1开始。参数是   与同等编号相关联   参数数组中的对象。

答案 2 :(得分:1)

PLINQO实现实体Detach,并允许您从一个上下文中分离实体,然后将其重新附加到另一个上下文。它还能够直接执行更新和删除,而无需先检索实体。有关详细信息,请查看网站http://www.plinqo.com/

答案 3 :(得分:0)

除非你将对象设置为使用乐观并发(我认为所有列都是nocheck),否则这将很难做到。使用任何类型的并发性,您将需要旧值和新值,至少对于检查的列。或者,您可以为更新创建和映射SQL函数/存储过程,或者使用ExecuteCommand直接执行SQL,如@Kyralessa所述。我认为Detach / Attach在配对时效果最好,即获取对象,分离它,使用它,然后在完成后重新附加并保存它。