LINQ时间戳 - 自动更新时间戳列?

时间:2011-08-08 16:03:30

标签: c# linq

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

我们有LINQ对象/表,其中包含 Last Update 列,需要在对象更改时随时更新。

我们可以提出几个“肮脏”的解决方案来解决这个问题,但不确定我们是否会采用正确的方法。

有一种简单的方法(可能在LINQ Object partial,DataContext等中)能够说,如果你INSERT / UPDATE,总是将“Last Update”列设置为DateTime.Now

更新我们在应用程序中的数千个位置对此表进行了操作,因此我们正在尝试找到让LINQ为我们完成此操作的方法,而无需查找此对象的每个位置已更新。

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

假设您正在谈论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;

答案 3 :(得分:0)

我主要坚持使用触发器或修改datacontext,但如果你使用EF ::

,你也可以尝试以下方法

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