私はSpring.NET AOPを使用して、C#永続オブジェクトがそのプロパティ(Spring.NET/examplesのSpring.AopQuickStart.Step6.2010) )が、私はMappingExceptionを取得しています - のために何存続:DecoratorAopProxy_8aa4d47e877a48b4828bf7a6a51bbedfSpring.NET AOPプロキシオブジェクトと連携するようにNHibernateを設定する
は、ここに私のコードません:
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"であり、NHibernateをスローするPersonではないという問題があると思います。
どうすればこの問題を解決できますか? DataBindingIntercepter.csの実装で
パーフェクト! (a)NHibernate.EmptyInterceptorのサブクラス化(またはIInterceptorの実装)、(b)GetEntityName()をオーバーライドしてプロキシの代わりに適切な型を返す、(c)カスタムを設定することによってカスタムインターセプタを作成することです。 NHibernate.Cfg.Configurationを作成するときのインターセプタ。 – rtorres