我正在尝试使用Fluent NHibernate和WCF创建服务层。如何使用LazyLoad?例如,我会得到一些对象。此对象包含使用LazyLoad映射的集合。因此,我的服务方法创建会话,检索对象并关闭会话。懒人收藏怎么样?我的服务调用者不会访问数据,因为我没有打开的会话。怎么治疗这个?
谢谢,伙计!!
答案 0 :(得分:0)
如果您与数据库有连接,则只能对NHibernate使用延迟加载。
如果您想坚持使用NHibernate并通过WCF访问您的数据,您需要切换到预先加载。
如果您愿意放弃WCF,您可以允许您的客户直接访问数据库。
如果您愿意放弃Nhiberhate,您可以使用WCF数据服务。
答案 1 :(得分:0)
将发生延迟加载,但是当您的返回值被序列化为WCF响应时,它将全部发生。例如,我们有这些类:
[DataContract]
public class Person
{
[DataMember]
public virtual string Name { get; set; }
[DataMember]
public virtual Address Address { get; set; }
}
[DataContract]
public class Address
{
}
让我们说Person.Address
是懒惰的。您在不加载地址的情况下查询某个人,并希望将此对象返回给客户端。
输入WCF。 WCF将序列化所有[DataMember]
,Address
就是其中之一。因此,将调用getter,如果您仍在using (ISession)
范围内,则会执行延迟加载。如果您没有使用using
范围而只是定义变量ISession
(您可能不会关闭),那么延迟查询也会执行。