Как для автоматического обновления свойства Modified в Entity в Entity Framework 4 при сохранении?

Я использую EF4 в VS2010, POCO и подход, основанный на модели.

Моя сущность имеет следующие свойства: Id: Guid, Name: String, Created: DateTime, Modified: DateTime , Версия: Int32.

Я создаю свою сущность, устанавливаю имя и сохраняю ее в базе данных, используя EF4-контекст. Это должно установить для Id новый Guid (работает с Identity-SGP), Created set to now, Modified left as null, Revision установлен на 0. Я извлекаю объект, меняю имя и снова сохраняю его. На этот раз значение Modified должно быть установлено на now, а ревизия - на 1.

Как мне лучше всего добиться этого, используя EF4 с EDMX-дизайнером?

Обновление:

Вот что я в итоге использовал:

public override int SaveChanges(System.Data.Objects.SaveOptions options)
{
    foreach (ObjectStateEntry entry in ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified).Where(e => e.Entity is EntityBase))
    {
        EntityBase entity = entry.Entity as EntityBase;
        if (entry.State == EntityState.Added)
        {
            entity.Version = new Version() { Major = 1, Minor = 0, Revision = 0 };
            entity.Created = DateTime.Now;
            if (OperationContext.Current != null) entity.CreatedBy = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name;
        }
        else if (entry.State == EntityState.Modified)
        {
            entity.Version.Revision++;
            entity.Modified = DateTime.Now;
            if (OperationContext.Current != null) entity.ModifiedBy = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name;
        }
    }

    return base.SaveChanges(options);
}

Что не работает ...: (

Проблема в том, что entry.State все еще не изменен, даже если я явно запускаю метод MarkAsModified (). Я не понимаю этого ...

Почему по умолчанию не включено отслеживание изменений? Я использую объекты с самопроверкой, так зачем мне его выключать и каждый раз явно включать? И почему сущности сохраняются в db, даже если состояние не изменено? А в чем разница между EntityState и ObjectState? В настоящий момент я делаю все изменения и обновления на стороне сервера, но через некоторое время я также буду использовать WCF-сервис для передачи сущностей туда и обратно ... Есть ли разница в том, как здесь обрабатываются изменения? Если на сервере все изменения, независимо от включения / выключения отслеживания изменений, сохраняются ?? Я хочу, чтобы ничто не могло быть сохранено без обновления Modified, Revision и т. Д. Эти свойства всегда должны быть установлены на сервере, когда объект получен обратно и был изменен. (Здесь я говорю не о стороне сервера sql, а о стороне сервера)

6
задан abatishchev 9 July 2012 в 13:55
поделиться