如何更新记录而无需先在LINQ中选择数据?
因为必须首先执行linq select(显然调用昂贵的SQL SELECT),更改所需的属性,然后执行SubmitChanges()。我希望避免这种情况,只是执行SQL UPDATE,我已经知道了ID。
答案 0 :(得分:1)
您需要使用Attach方法将断开连接的实体“附加”到您的表中。 MSDN上的这篇文章概述了如何使用它:
答案 1 :(得分:1)
我还没有尝试过,但看起来好像你可以用Attach:
来做到这一点Table(TEntity).Attach Method (TEntity, Boolean)
您将对象设置为更新状态并将其传入,将布尔参数设置为true。当然,那么你必须设置所有字段,而不仅仅是你想要改变的字段。
如果您只想更改一个或两个字段,可以使用DataContext对象上的ExecuteCommand和ExecuteQuery方法直接调用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在配对时效果最好,即获取对象,分离它,使用它,然后在完成后重新附加并保存它。