我正在尝试将fetchmode设置为渴望获得对象图中两层深的属性。
DetachedCriteria homeSupportServicesPlacementInvoiceQuery = DetachedCriteria.For<HomeSupportServicesPlacementInvoice>()
.SetFetchMode("VendorService", FetchMode.Eager)
.SetFetchMode("VendorService.Vendor", FetchMode.Eager);
NHibernate正确填充我的VendorService对象的值,但是在将对象移动到业务层并且不再附加到会话后,Vendor属性不再是水合的。我在这个过程中注意到的另一个奇怪之处是,在快速监视窗口中,调试VendorService的属性为null,而Property已使用正确的值设置。
我做错了什么?
对于那些关注问题的人,显然你可以为不在映射中的属性设置fetchmode,它将被填充(你可以在调试中看到它)但是当你从对象中分离对象时值会消失会话。
答案 0 :(得分:1)
根据您提供的信息,我打赌VendorService的映射不正确。 我会仔细检查属性Vendor是否正确映射。
答案 1 :(得分:1)
代理的字段未初始化是正常的。代理继承字段,但不使用它们。它只是一个包装器,它将所有调用委托给真实对象(也是属性的getter和setter)。真实对象是另一个实例,没有代理,由代理聚合。应该正确初始化真实对象的字段。
我不知道为什么你在序列化后会丢失数据。它很可能是一个序列化问题,而不是(非常)NH特定的。