NHibernate会填充属性,但该属性仍为null

时间:2011-08-22 13:35:53

标签: nhibernate

我正在尝试将fetchmode设置为渴望获得对象图中两层深的属性。

DetachedCriteria homeSupportServicesPlacementInvoiceQuery = DetachedCriteria.For<HomeSupportServicesPlacementInvoice>()
            .SetFetchMode("VendorService", FetchMode.Eager)
            .SetFetchMode("VendorService.Vendor", FetchMode.Eager);

NHibernate正确填充我的VendorService对象的值,但是在将对象移动到业务层并且不再附加到会话后,Vendor属性不再是水合的。我在这个过程中注意到的另一个奇怪之处是,在快速监视窗口中,调试VendorService的属性为null,而Property已使用正确的值设置。

enter image description here

我做错了什么?

对于那些关注问题的人,显然你可以为不在映射中的属性设置fetchmode,它将被填充(你可以在调试中看到它)但是当你从对象中分离对象时值会消失会话。

2 个答案:

答案 0 :(得分:1)

根据您提供的信息,我打赌VendorService的映射不正确。 我会仔细检查属性Vendor是否正确映射。

答案 1 :(得分:1)

代理的字段未初始化是正常的。代理继承字段,但不使用它们。它只是一个包装器,它将所有调用委托给真实对象(也是属性的getter和setter)。真实对象是另一个实例,没有代理,由代理聚合。应该正确初始化真实对象的字段。

我不知道为什么你在序列化后会丢失数据。它很可能是一个序列化问题,而不是(非常)NH特定的。