IBatisNet中使用Lazyload的注意事项。
做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后调试一切正常,问题解决。
希望本文能给同样遇到此问题的朋友一点提示。