Entity Framework 4.1 Идентификация новых объектов в контексте - PullRequest
1 голос
/ 14 июня 2011

У меня есть базовый класс, как показано ниже. Все мои сущности наследуют от этого

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

Я хочу установить CreationDate при добавлении нового объекта в базу данных.

Переопределив метод SaveChanges() и проверив, что EntityState находится в состоянии Modified, я могу установить ModifiedDate.

Проблема в том, что я не могу определить, является ли это новый объект или нет, проверив EntityState, поскольку новые объекты и другие загруженные объекты находятся в состоянии Added.

Так есть ли способ дифференцировать новые сущности?

спасибо заранее.

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Загруженные объекты всегда находятся в состоянии Unchanged.Недавно добавленные объекты в состоянии Added, измененные объекты в состоянии Modified и удаленные объекты в состоянии Deleted.Если вы видите какое-либо другое поведение, вы делаете что-то неправильно или используете EF неправильно.Btw.если процесс создания не занимает много времени, настройку CreationDate можно выполнить просто:

public Entity()
{
    CreationDate = DateTime.Now;
}
0 голосов
/ 14 июня 2011

Я работал над этим, просматривая элементы в 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();
}
...