【问题标题】:Entity Framework 4.1 Identifying New Entities in the Context实体框架 4.1 在上下文中识别新实体
【发布时间】:2011-06-14 00:52:10
【问题描述】:

我有一个像下面这样的基类。我所有的实体都继承自这个

public abstract Entity
{
  public DataTime CreationDate{get;set;}
  public DataTime ModifiedDate{get;set;}
}

我想在将新实体添加到数据库时设置CreationDate

通过覆盖SaveChanges() 方法并检查EntityState 是否处于Modified 状态,我可以设置ModifiedDate

问题是我无法通过检查EntityState 来确定它是否是新实体,因为新实体和其他加载的实体处于Added 状态。

那么有没有办法区分新实体?

提前致谢。

【问题讨论】:

    标签: entity-framework-4.1 ef-code-first


    【解决方案1】:

    加载的实体始终处于Unchanged 状态。新增Added 状态的实体,更改Modified 状态的实体并移除Deleted 状态的实体。如果您看到任何其他行为,则说明您做错了什么或错误地使用了 EF。顺便提一句。除非您的创建过程不需要很长时间,否则设置CreationDate 可以通过以下方式完成:

    public Entity()
    {
        CreationDate = DateTime.Now;
    }
    

    【讨论】:

      【解决方案2】:

      我通过检查 ChangeTracker.Entries() 中的项目并将当前日期/时间分配给 CreationDate-Property 为空的创建日期来解决此问题。示例:

      public override int SaveChanges()
      {
        DateTime saveTime = DateTime.Now;
        foreach (var entry in this.ChangeTracker.Entries())
        {
          if (entry.Entity is Entity)
          {
            if (entry.Property("CreationDate").CurrentValue == null)
              entry.Property("CreationDate").CurrentValue = saveTime;
            entry.Property("ModifiedDate").CurrentValue = saveTime;
      
           }
         }
         return base.SaveChanges();
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-13
        相关资源
        最近更新 更多