LINQ to SQL - 更新记录

Ful*_*ton 7 sql linq asp.net

使用asp.net 4虽然C#.

在我的数据访问层中,我有保存和更新记录的方法.保存很容易,但更新很繁琐.

我之前使用的SubSonic很棒,因为它有活动记录,并且知道如果我加载了一条记录,更改了一些条目然后又保存了它,它认为它是一个更新,并没有尝试在DB中保存一个新条目.

我不知道如何在LINQ中做同样的事情.结果我的工作流程如下:

  1. 网页从数据库中抓取"记录A"
  2. 其中的某些值由用户更改.
  3. "记录A"被传递回数据访问层
  4. 我现在需要再次加载Record A,称之为'SavedRecord A',使用传递的'Record A'中的值更新此对象中的所有值,然后更新/保存'SavedRecord A'!

如果我只保存'记录A',我最终会在数据库中输入一个新条目.

显然,通过记录A并执行以下操作会更好:

RecordA.Update();
Run Code Online (Sandbox Code Playgroud)

我假设我在这里缺少一些东西,但我无法在线找到一个简单的答案.

And*_*bel 1

当 LINQ-to-SQL 更新数据库中的记录时,它需要确切地知道哪些字段发生了更改,以便只更新这些字段。您基本上有三个选择:

  • 当更新的数据发送回 Web 服务器时,从数据库加载现有数据,将所有属性分配给加载的对象并调用SubmitChanges(). 分配了现有值的任何属性都不会更新。
  • 跟踪对象的未修改状态并使用Attach未修改和修改的值。
  • 使用乐观并发检查所需的所有状态初始化一个新对象(如果启用,则默认启用)。然后附加该对象,最后附加后更新所有已更改的属性,以使 DataContext 更改跟踪器了解这些已更新的属性。

我通常使用第一个选项,因为它最简单。两次数据库调用会带来性能损失,但除非您进行大量更新,否则这并不重要。