2011-08-22 66 views
1

我想设置fetchmode渴望在我的对象图中有两层深的属性。NHibernate填充属性,但属性保持为空

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

NHibernate的填充我的VendorService对象的正确值,对象移动到业务层但是之后,不再附加到会话,卖方属性不再水合。我注意到这个过程的唯一另外一个怪事是,在quickwatch窗口中,调试VendorService的属性时为null,而Property已经设置了正确的值。

enter image description here

我在做什么错?

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

+2

你可以发布你的财产实施和映射的代码? –

+1

VendorService的映射是什么样的。检查属性Vendor是否正确映射 – Rippo

+0

谢谢Tom&Rippo,问题在于映射。我认为我已经正确地检查了它们,但是在我更新代码时发现了这个问题。 – rie819

回答

1

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

1

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

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