实体框架4.1识别上下文中的新实体

时间:2011-06-14 00:52:11

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

我有一个基类,如下所示。我的所有实体都继承自

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

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

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

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

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

提前谢谢。

2 个答案:

答案 0 :(得分:1)

加载的实体始终处于Unchanged状态。 Added状态中新添加的实体,Modified状态中的实体已更改,Deleted状态中已删除实体。如果您发现任何其他行为,您做错了或使用EF不正确。顺便说一句。除非您的创建过程花费很长时间,否则可以通过以下方式设置CreationDate

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

答案 1 :(得分:0)

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

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();
}