NHibernate не обновляет таблицу родительского объекта при использовании прослушивателей событий - PullRequest
1 голос
/ 14 октября 2011

Я пытаюсь добавить поля аудита в мои доменные объекты, прежде чем они будут вставлены или обновлены с использованием прослушивателей событий NHibernate. Используя интерфейсы прослушивания событий IPreInsert и IPreUpdate, я могу установить поля аудита для всех объектов домена, за исключением тех, у которых поля аудита хранятся в таблице родительского объекта. Например, вот мои классы сущностей:

public class Person : Entity
{
   public string name {get; set;}
}

public class Entity : PersistentEntity
{
   public int EntityTypeId {get; set;}
}

public abstract class PersistentEntity
{
   public virtual Guid Id { get; set;}
   public virtual Guid UpdateUser {get; set;}
   public virtual DateTime UpdateDate {get; set;}
}

Вот мои отображения:

public class PersonMap : SubclassMap<Person>
{
   Map(x => x.Name);
}

public class EntityMap : PersistentEntityMap<Entity>
{
   Map(x => x.EntityTypeId);
}

public abstract class PersistentEntityMap<T> : ClassMap<T> where T : PersistentEntityMap
{
    Id(x => x.Id).GeneratedBy.GuidComb();
    Map(x => x.UpdateUser);
    Map(x => x.UpdateDate);
}

А вот как определяются таблицы:

Персона Таблица:

  • Id
  • Имя

Таблица сущностей:

  • Id
  • EntityTypeId
  • UpdateUser
  • UpdateDate

Таким образом, при такой настройке прослушиватель событий IPreInsert работает отлично, вставляя нового человека в таблицу персон и вставляя новый Entity в таблицу Entity с правильно заполненными UpdateUser и UpdateDate. Однако, если я должен обновить имя человека, прослушиватель событий IPreUpdate запускается и изменяет поле UpdateDate объекта, но обновление таблицы сущностей никогда не выполняется. Принимая советы с этой страницы,

http://nhforge.org/wikis/howtonh/changing-values-in-nhibernate-events.aspx

Я пытался использовать прослушиватели событий IFlushEntity и ISaveOrUpdate безрезультатно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...