1
我正在使用Spring.NET AOP來確定何時C#持久對象具有更改其任何屬性(Spring.AopQuickStart.Step6.2010 Spring.NET/examples中),但我得到一個MappingException - 沒有留存爲:DecoratorAopProxy_8aa4d47e877a48b4828bf7a6a51bbedf配置NHibernate使用Spring.NET AOP代理對象
這裏是我的代碼:
var person = Repository.GetById(personId);
var personProxy = GetProxy(person);
// udpate some properties in personProxy - this is where my advisor determines if/what has changed
Repository.Save(personProxy); // exception thrown here
這裏是GetProxy樣子(每AopQuickStart爲例):
private static Person GetProxy(Person target)
{
var proxyFactory = new Spring.AOP.Framework.ProxyFactory(target);
proxyFactory.AddAdvisor(new ModificationAdvisor(target.GetType()));
proxyFactory.AddIntroduction(new IsModifiedAdvisor());
proxyFactory.ProxyTargetType = true;
return (Person)proxyFactory.GetProxy();
}
我認爲問題是傳遞給NHibernate的會話保存的對象的GetType是「DecoratorAopProxy」,而不是Person拋出NHibernate關閉。
我該如何解決這個問題?
完美! (a)通過繼承NHibernate.EmptyInterceptor(或實現IInterceptor)創建一個自定義攔截器,(b)重寫它的GetEntityName()以返回適當的類型而不是代理,並且(c)設置你的自定義創建NHibernate.Cfg.Configuration時的攔截器。 – rtorres 2012-03-18 19:18:42