LUKIYA'S NEVERLAND

春去秋来,花谢花开。


做X-Library项目,类与类之间的联系很多,使用NBear的时代根本不需要考虑这个,代码生成工具会帮你搞定一切。
 
但是IBatisNet需要自己手动设置,类代码如下(缩减,省略了很多属性):
 
resultMap:
 
 
这里使用了lazyload="true",但是在实际使用中,我发现com_Designers类的Office属性始终为空,想了很多可能的原因,怎么也找不到问题所在。
 
使用log4net监视后发现IBatisNet只建立了动态代理,但是根本没有去填充这个属性。
 
到处找答案,弄了一天,就在快要抓狂时在IBatisNet的文档里发现了这么一句话:
 
Lazy loading is supported on concrete class via Castle.DynamicProxy component. In this case, you must declare all methods/properties of the class that you want to proxy as virtual.
 
…………无语,忘记了动态代理的对象所有方法和属性都必须是virtual…………
 
将com_Offices类所有属性都修改为virtual后调试一切正常,问题解决。
 
希望本文能给同样遇到此问题的朋友一点提示。