NHibernate填充属性,但属性保持为null
我正试图将fetchmode设置为渴望在对象图中有两层深度的属性NHibernate填充属性,但属性保持为null,nhibernate,Nhibernate,我正试图将fetchmode设置为渴望在对象图中有两层深度的属性 DetachedCriteria homeSupportServicesPlacementInvoiceQuery = DetachedCriteria.For<HomeSupportServicesPlacementInvoice>() .SetFetchMode("VendorService", FetchMode.Eager) .SetFetchMode("Vend
DetachedCriteria homeSupportServicesPlacementInvoiceQuery = DetachedCriteria.For<HomeSupportServicesPlacementInvoice>()
.SetFetchMode("VendorService", FetchMode.Eager)
.SetFetchMode("VendorService.Vendor", FetchMode.Eager);
DetachedCriteria homeSupportServicesPlacementInvoiceQuery=DetachedCriteria.For()
.SetFetchMode(“供应商服务”,FetchMode.Eager)
.SetFetchMode(“VendorService.Vendor”,FetchMode.Eager);
NHibernate正确地填充了我的VendorService对象的值,但是,当对象移动到业务层并且不再附加到会话后,Vendor属性就不再有效。我在这个过程中注意到的另一个奇怪之处是,在quickwatch窗口中,当调试VendorService的属性时,该属性被设置为null,而该属性被设置为正确的值
我做错了什么
对于那些回答问题的人,显然可以为映射中不存在的属性设置fetchmode,该属性将被填充(您可以在调试中看到),但当您从会话中分离对象时,值将消失。继续您提供的信息,我打赌映射对于VendorService是不正确的。
我将再次检查属性供应商是否正确映射。代理的字段未初始化是正常的。代理继承字段,但不使用它们。它只是一个将所有调用委托给真实对象(以及属性的getter和setter)的包装器。真实对象是另一个实例,没有代理,由代理聚合。真实对象的字段应该正确初始化
我不知道序列化后为什么会丢失数据。这很可能是一个序列化问题,并且不是(非常)特定于NH。您可以发布属性实现和映射的代码吗?VendorService的映射是什么样子的。检查物业供应商是否正确映射感谢Tom&Rippo,问题在于映射。我想我已经正确地检查了它们,但是在为我的更新删除代码时发现了问题。我可以添加我的评论作为答案吗?当然可以。我不想自己回答这个问题,因为是你和汤姆给我指出了解决办法。