2008-12-30 34 views
2

如何在不必首先在LINQ中选择数据的情况下更新记录?因为您必须首先执行linq select(显然调用成本高昂的SQL SELECT),请更改所需属性,然后执行SubmitChanges()。我希望避免这种情况,只需执行SQL UPDATE,我已经知道该ID。更新之前没有先选择LINQ 2 SQL中的数据?

回答

1

我还没有尝试过,但看起来,如果你能做到这一点与附件:

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

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

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

该命令的语法几乎 一样用于创建 一个ADO.NET DataCommand的语法。唯一的 区别在于如何指定参数 。具体而言,您 通过在大括号括起来 指定参数({...})和枚举它们 从1开始的参数是与所述参数阵列中的同样编号 对象相关联 。

0

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

+0

是的。我的目的是用户可以重新排列元素的排序顺序;我可以返回所有的表单数据并更新排序顺序,但是他们所有的表单数据也会被更新,即使他们只是想更新排序。我真的很想更新订单栏,但听到你的意思concurr。 – GONeale 2008-12-30 03:45:00

1

PLINQO实现实体分离,并允许您从一个上下文中分离实体,然后将其重新附加到另一个上下文中。它还能够直接执行更新和删除操作,而无需首先检索实体。欲了解更多信息,你可以看看网站http://www.plinqo.com/

+0

Thnx Eric,方便。 – GONeale 2009-05-05 00:30:35