2010-08-01 59 views
0

我有一个问题,当它是另一个对象的属性时返回一个JsonNetResult对象,但是当我明确地获取对象时它工作,例如,JsonNetResult不返回S#arp Nhibernate对象

JsonNetResult res = new JsonNetResult(); 
res.Formatting = Formatting.Indented; 
res.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; 
res.Data = addressRepository.Get(7); 
return res; 

返回有效结果然而

JsonNetResult res = new JsonNetResult(); 
res.Formatting = Formatting.Indented; 
res.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; 
res.Data = businessRepository.Get(businessID).Address; 
return res; 

将返回一个空对象;如同

JsonNetResult res = new JsonNetResult(); 
res.Formatting = Formatting.Indented; 
res.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; 
res.Data = addressRepository.Get(businessRepository.Get(businessID).Address.Id); 
return res;` 

即使地址和它的ID在每种情况下都完全相同。 有什么明显的我失踪了吗?

+1

澄清:您是否在调试器中查看过此内容,并确定“businessRepository.Get(businessID).Address'返回您实际需要的正确对象?调试器在分配后立即说的是“res.Data”的值? – Timwi 2010-08-01 12:12:43

+0

看着调试器的对象看起来完全一样,除了不工作的一个名为'HibernateLazyInitializer'的属性 – MOP 2010-08-02 08:50:21

回答

1

这听起来像是一个懒惰加载问题,这会在尝试水合Json对象时发生。地址属性是一个字符串还是引用另一个对象?确保没有递归引用,尽管JsonNetResult应该处理这个问题。

进入您的实体的映射和补充一点:

mapping.References(x => x.Address).Not.LazyLoad(); 

这应该拿出任何延迟加载代理的方程。

+0

真棒它的作品谢谢。 猜猜我不能结合延迟与Json – MOP 2010-08-03 09:16:19