首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架:设置更新时间戳

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

Stack Overflow用户
提问于 2010-01-20 07:12:11
回答 4查看 9.4K关注 0票数 10

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

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-20 09:46:15

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

票数 3
EN

Stack Overflow用户

发布于 2012-10-29 06:04:51

下面是另外两个想法的实现,注意事项如下

在调用SaveChanges()之前,

  • 确保您创建自动检测更改的代理,或者手动检测到更改。如果不是,则对象状态将为EntityState.Unmodified,并且不会更新上次修改的时间戳。
  • 我扩展了代码,以便在首次创建对象时也设置上次修改的时间戳。

代码

代码语言:javascript
复制
public interface IHasLastModified
{
    DateTime? LastModified { get; set; }
}

public class MyClass : IHasLastModified
{
    public virtual int Id { get; set; }

    public virtual string SomeOtherProperty { get; set; }

    public virtual DateTime? LastModified { get; set; }
}

public class MyContext : DbContext
{
    public override int SaveChanges()
    {            
        DateTime now = DateTime.UtcNow;
        foreach (ObjectStateEntry entry in (this as IObjectContextAdapter).ObjectContext.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified))
        {
            if (!entry.IsRelationship)
            {
                IHasLastModified lastModified = entry.Entity as IHasLastModified;
                if (lastModified != null)
                    lastModified.LastModified = now;
            }
        }

        return base.SaveChanges();
    }
票数 8
EN

Stack Overflow用户

发布于 2010-01-20 07:43:11

在调用context.SaveChanges()之前,我调用了这个扩展方法

代码语言:javascript
复制
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事件来做类似的事情。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2097947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档