今天產品發現NHibernate Session Update 失效了,查了很久發現是我們在Service Layer 的 Aop Transaction 失效了,
導致Load 出來的物件沒有被掛上Proxy ,進一步影響NHibernate 無法監控物件是否有被異動。
首先合理懷疑是Aop Pattern 有問題,檢查一下XML檔,
1
2
3
4
5
<object id="ServiceOperation" type="Spring.Aop.Support.SdkRegularExpressionMethodPointcut, Spring.Aop">
<property name="pattern" value="Product.Domain.*.Service" />
<property name="pattern" value="Product.Domain.Module1.*.Service" />
<property name="pattern" value="Product.Domain.Module2.*.Service" />
</object>
看起來很正常,仔細測試一下,發現只有在最後一個Module2 Aop才會正常,合理懷疑是下蓋上導致最後一個才有用,
查了一下多個Patterns (複數+S)應該使用以下寫法,Aop 就會正常了!
1
2
3
4
5
6
7
8
9
<object id="ServiceOperation" type="Spring.Aop.Support.SdkRegularExpressionMethodPointcut, Spring.Aop">
<property name="patterns">
<list>
<value>Product.Domain.*.Service</value>
<value>Product.Domain.Module1.*.Service</value>
<value>Product.Domain.Module2.*.Service</value>
</list>
</property>
</object>
延伸閱讀:[NHibernate] Session Update 奇怪的寫法
-
Previous
[Asp .Net MVC] ViewMode vs DTO(Data Transfer Object) -
Next
[NHibernate] Session Update 奇怪的寫法