Я установил IIntercpetor
, чтобы обновить временную метку (дату последней модификации) объектов при их сохранении или обновлении.NHibernate Interceptor не работает
Мой implementaion выглядит следующим образом:
public class NhInterceptor : EmptyInterceptor
{
public override bool OnSave(object entity, object id, object[] state,
string[] propertyNames, NHibernate.Type.IType[] types)
{
var baseEntity = entity as EntityBase;
if (baseEntity == null)
return false;
baseEntity.LastModification = DateTime.Now;
return true;
}
public override bool OnFlushDirty(object entity, object id,
object[] currentState, object[] previousState,
string[] propertyNames, NHibernate.Type.IType[] types)
{
var baseEntity = entity as EntityBase;
if (baseEntity == null)
return false;
baseEntity.LastModification = DateTime.Now;
return true;
}
}
Этот код попал, и отладчик показывает, что baseEntity.LastModification
имеет правильное значение, как раз перед возвращением.
Однако мой вывод Json (в Web API) показывает LastModification
как 0001-01-01T00:00:00
, и если я проверю свой созданный объект в базе данных, он также покажет тот же результат.
Почему это не работает?
Я предпочел бы не иметь "волшебные струны", это бедные для рефакторинга. Но действительно, это работает! – Joel
Вы можете предотвратить использование MagicString с помощью выражения, например кода здесь, например: http://www.codeproject.com/Tips/301274/How-to-get-property-name-using-Expression – Hylaean
Я не могу выдвигать вас больше;), что делает трюк! – Joel