实体框架:设置更新时间戳

entity-framework

我们所有的数据库表都有UpdateUserID和UpdateTS。如果我的实体有变化,我想要这套。有没有办法可以有条件地在现场进行此更新?

如果我在代码中手动设置UpdateTS,那么它将说明我的实体已更改并将始终更新该对象。

一般承认的答案

您应该能够处理SavingChanges事件( 此处示例 )并执行@sander概述的逻辑


热门答案

我在调用context.SaveChanges()之前调用此扩展方法:

public static void SetLastModified(this ObjectContext context, DateTime dateTime)
{
    DateTime now = DateTime.UtcNow;
    foreach (ObjectStateEntry entry in context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified))
    {
        if (!entry.IsRelationship)
        {
            IHasLastModified lastModified = entry.Entity as IHasLastModified;
            if (lastModified != null)
                lastModified.LastModified = now;
        }
    }
}

我可以轻松地调用此代码,因为我将ObjectContext包装在存储库类中。如果你正在使用它,你可以挂钩ObjectContext.SavingChanges事件来做类似的事情。




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因