【问题标题】:LINQ Timestamp - Automatically updating a timestamp column?LINQ Timestamp - 自动更新时间戳列?
【发布时间】:2011-08-09 00:18:51
【问题描述】:

我不确定是否有快速解决此问题的方法。

我们的 LINQ 对象/表有一个 Last Update 列,该列需要在对象更改时进行更新。

我们可以想出几个“肮脏”的解决方案来解决这个问题,但不确定我们是否走在正确的道路上。

是否有一种简单的方法(可能在 LINQ 对象部分、DataContext 等中)可以说,如果您插入/更新,请始终将“上次更新”列设置为 DateTime.Now?

更新我们在应用程序的数千个位置对该表进行了操作,因此我们试图找到一种方法让 LINQ 为我们完成此操作,而不必找到该对象的每个位置已更新。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    您可以创建一个触发器,该触发器会在每次触摸表数据以进行插入/更新时自动更新此信息。

    【讨论】:

    • 你有什么好的参考资料让我可以看看这样做吗?
    • 您需要告诉我们您使用的是什么 DBMS。
    • +1。我的经验数据库触发器是记录时间戳的唯一选项。一旦有多个客户端应用程序更新您的表,您就会遇到不同机器之间的同步问题。您的 DBMS 文档应该可以帮助您。
    【解决方案2】:

    您可以扩展您的 DataContext 并覆盖 Update 方法,请参见此处:

    http://msdn.microsoft.com/en-us/library/bb425822.aspx#linqtosql_topic21

    确保在设置最后更新时间后调用您覆盖的任何方法的 base 版本。

    【讨论】:

      【解决方案3】:

      假设您正在使用 LINQ to SQL,您可以覆盖 SubmitChanges,因此基本上可以做任何您想做的事情...例如:

      partial class YourDataContext
      {
          public override void SubmitChanges(ConflictMode failureMode) // don't worry, the parameterless version you know calls this one...
          {
              var changeSet = GetChangeSet();
              foreach (object insert in changeSet.Inserts)
              {
                  // set LastUpdate property
              }
              foreach (object update in changeSet.Updates)
              {
                  // set LastUpdate property
              }
              base.SubmitChanges();
          }
      }
      

      当然,注释的“设置 LastUpdate 属性”不一定是微不足道的。我在几秒钟内想出的一种方法是创建一个具有 LastUpdate 属性的接口,然后从中派生所有 linq 对象:

      public interface IHasLastUpdate
      {
          DateTime LastUpdate { get; set; }
      }
      
      partial class Order : IHasLastUpdate {}
      partial class Product : IHasLastUpdate {}
      // etc
      

      然后你可以用

      替换上面位中的注释行
      (insert as IHasLastUpdate).LastUpdate = DateTime.Now;
      

      【讨论】:

        【解决方案4】:

        我会坚持使用触发器或主要修改数据上下文,但如果您使用的是 EF::

        ,您也可以尝试以下操作

        为您想要执行此操作的所有类型创建部分类,然后在其中创建一个构造函数,该构造函数将事件处理程序添加到 propertychanged 事件并在发生更改时更新时间戳。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-28
          • 2012-12-26
          • 1970-01-01
          • 2020-07-08
          • 1970-01-01
          相关资源
          最近更新 更多