2011-08-08 110 views
4

我不确定是否有快速解决此问题的方法。LINQ时间戳 - 自动更新时间戳列?

我们有LINQ对象/表格,其中有一个最后更新列,只要对象发生更改就需要更新该列。

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

有没有一种简单的方法(可能在LINQ对象partial,DataContext等)能够说,如果你插入/更新,总是设置“上次更新”列DateTime.Now

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

回答

4

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

+0

你有什么好的参考资料可以在这里看到吗? – TheJediCowboy

+0

您需要告诉我们您正在使用的DBMS。 –

+0

http://sqlserver2000.databases.aspfaq.com/how-do-i-audit-changes-to-sql-server-data.html – Travis

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; 
0

我会用触发器或主要修改的datacontext棒,但你也可以试试下面的,如果你对EF ::

所有的创建部分类类型,你想这样做,然后创建一个构造函数e将事件处理程序添加到propertychanged事件并在更改时更新时间戳。