我不确定是否有快速解决此问题的方法。
我们有LINQ对象/表,其中包含 Last Update 列,需要在对象更改时随时更新。
我们可以提出几个“肮脏”的解决方案来解决这个问题,但不确定我们是否会采用正确的方法。
有一种简单的方法(可能在LINQ Object partial,DataContext等中)能够说,如果你INSERT / UPDATE,总是将“Last Update”列设置为DateTime.Now
更新我们在应用程序中的数千个位置对此表进行了操作,因此我们正在尝试找到让LINQ为我们完成此操作的方法,而无需查找此对象的每个位置已更新。
答案 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事件,并在更改某些内容时更新时间戳。