2012-03-15 71 views
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關閉。

我該如何解決這個問題?

回答

0

看看DataBindingIntercepter.cs的實施和DataBindingFactory.cs

https://github.com/ayende/Effectus/tree/master/Effectus/Infrastructure

+1

完美! (a)通過繼承NHibernate.EmptyInterceptor(或實現IInterceptor)創建一個自定義攔截器,(b)重寫它的GetEntityName()以返回適當的類型而不是代理,並且(c)設置你的自定義創建NHibernate.Cfg.Configuration時的攔截器。 – rtorres 2012-03-18 19:18:42