Я использую EF4 в VS2010, POCO и подход, основанный на модели.
Моя сущность имеет следующие свойства: Id: Guid, Имя: String, Создано: DateTime, Изменено: DateTime, Редакция: Int32.
Я создаю свою сущность, задаю имя и сохраняю его в базе данных, используя EF4-контекст.Это должно установить Id для нового Guid (работает с Identity-SGP), созданный установленный в настоящее время, измененный оставленный как ноль, Revision, установленный в 0. Я получаю объект, изменяю имя и сохраняю его снова.На этот раз значение Modified должно быть установлено сейчас, а ревизия должна быть 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);
}
Что не работает ...: (
Проблема в том, что запись. Состояние по-прежнему не изменено дажеесли я явно запускаю метод MarkAsModified (). Я не получаю этого ...
Почему отслеживание изменений не включено по умолчанию? Я использую объекты самоконтроля, так почему я хочу его отключить и явно отключить егона каждый раз? И почему сущности сохраняются в БД, даже если состояние не изменено? И в чем разница между EntityState и ObjectState? В настоящий момент я делаю все изменения и обновления на стороне сервера, но я также буду использовать WCF-сервис для передачи сущностей туда и обратноНекоторое время спустя ... Есть ли разница в том, как здесь обрабатываются изменения? Если на стороне сервера все изменения, независимо от того, включено или выключено отслеживание изменений, сохраняются? Я хочу, чтобы ничего не происходило.когда-либо сможет храниться без обновления Modified, Revision и т. д. Эти свойства всегда должны быть установлены на сервере, когда объект получен и изменен.(Я говорю здесь не о стороне сервера sql, а о стороне сервера обслуживания)