【问题标题】:Update without first selecting data in LINQ 2 SQL?更新而不首先在 LINQ 2 SQL 中选择数据?
【发布时间】:2010-09-28 19:14:01
【问题描述】:

如何在不先在 LINQ 中选择数据的情况下更新记录?

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

【问题讨论】:

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


    【解决方案1】:

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

    Data Retrieval and CUD Operations in N-Tier Applications

    【讨论】:

      【解决方案2】:

      我没试过,但看起来你可以用 Attach 来做到这一点:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 是的。我的目的是用户可以重新排列元素的排序顺序;我可以返回所有表单数据并更新排序顺序,但随后他们的所有表单数据也会更新,即使他们只想更新排序。我真的很想更新订单列,但听听你的意思。
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2018-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-09
          • 2021-04-16
          相关资源
          最近更新 更多