У меня есть проект с использованием NHibernate 3. Я использовал Auditor Event Listener
в NHibernate для обрезания свойств строки в моих сущностях.Неверный вызов `OnPreUpdate` в Auditor Реализация прослушивателя событий в NHibernate
Мой код:
public class AuditorEventListener : IPreInsertEventListener, IPreUpdateEventListener
{
public bool OnPreInsert(PreInsertEvent preInsertEvent)
{
Correction(preInsertEvent.Entity);
return false;
}
public bool OnPreUpdate(PreUpdateEvent preUpdateEvent)
{
Correction(preUpdateEvent.Entity);
return false;
}
internal static void Correction(object entity)
{
var properties = entity.GetType().GetProperties().Where(p => p.PropertyType == typeof(String));
foreach (var item in properties)
{
var result = item.GetValue(entity, null).ToString();
result = result.Trim();
item.SetValue(entity, result, null);
}
}
}
NHibernate конфигурации является:
<event type="pre-insert">
<listener class="NS.NHibernate.AuditorEventListener, NS.NHibernate" />
</event>
<event type="pre-update">
<listener class="NS.NHibernate.AuditorEventListener, NS.NHibernate" />
</event>
Я использовал ниже команды для сохранения и обновления для юридических лиц:
SessionInstance.Save(item);
SessionInstance.Update(item);
Моя проблема заключается в экономии лица , Когда я вызываю метод save, вызывается метод OnPreInsert
. Когда я вызываю CommitTransaction() OnPreUpdate
, вызывается автоматически.
Также я использовал Concurrency
в NHibernate, и это автоматически OnPreUpdate
вызов вызвал к стоимости Version
собственности в базе данных будет 2
вместо 1
до сих пор не проблемы но для следующего обновления этой ошибки объекта параллелизма будет происходить, потому что значение версии в этот объект равен 1
, но значение версии в базе данных - 2
.
Почему OnPreUpdate
называется?
Моя настройка «FlushMode» находится в режиме «Авто», и мне нужен этот режим. Я не могу установить его в режиме «Никогда», потому что логика моего проекта не позволяла мне это делать. – Ehsan