【问题标题】:SQL Server RowVersionSQL Server 行版本
【发布时间】:2010-01-08 04:54:10
【问题描述】:

快速问题 Re:RowVersion 的实现。

我希望将它包含在我的下一个数据库中(现在正在设计),我正在考虑两种不同的方式:

  1. 所有表中的 RowVersion 行
  2. 一个单独的 RowVersion 表,该表的 ID 作为外键并链接到它。

有人试过吗?如果是这样,您遇到了哪些陷阱或专业人士?

我将使用 LINQ 通过 C# 2008 和 SQL Server 2008 访问数据。

谢谢,

詹姆斯

【问题讨论】:

    标签: c# .net sql sql-server linq


    【解决方案1】:

    如果您使用的是 LINQ to SQL,那么最好为每个实体表包含一个时间戳/行版本列,因为这允许 LINQ 非常轻松地使用乐观并发并导致更新性能稍好(仅作为 LINQ必须查询时间戳列,并且不必比较其他列的更改)。

    所以选择第一个选项。第二个选项是一个非首发,真的。

    【讨论】:

    • 正如我所怀疑的......重新发明轮子没有意义!谢谢山姆。
    【解决方案2】:

    将您的 rowversion 添加到主表 - 将其放在第二个表中并链接到它会降低性能。

    正如 Sam 上面所说,LINQ 受益于在表上设置行版本 - 但我认为它不适用于链接表。

    【讨论】:

      【解决方案3】:

      假设 RowVersion 是指时间戳(坏名)数据类型。

      在所有表中使用 Rowversion 列。

      SQLServer 自动更新列。

      我从未使用过 LINQ to SQL(就像我的原始 SQL),但 Rowversion 列在更新(并发)方面非常有用。

      只需使用“WHERE ID=@ID AND ROWVERSION=@RV”来处理并发更新。

      不要使用第二个选项!

      【讨论】:

      • 从 SQL Server 2008 开始,该数据类型称为“RowVersion”(因为 TIMESTAMP 名称非常容易误导和混淆)
      • marc_s:您是对的,但 Management Studio 尚未意识到这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-08
      • 2016-04-26
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      相关资源
      最近更新 更多