0

我正在尝试使用 Fluent NHibernate 和 WCF 创建一个服务层。如何使用 LazyLoad?例如,我会得到一些对象。该对象包含一个用 LazyLoad 映射的集合。所以,我的服务方法创建一个会话,检索对象并关闭会话。懒惰的收集呢?我的服务调用者不会访问数据,因为我没有打开的会话。如何治疗?

多谢你们!!

4

2 回答 2

0

如果您连接到数据库,则只能使用 NHibernate 的延迟加载。

如果您想坚持使用 NHibernate 并通过 WCF 访问您的数据,您需要切换到预加载。

如果你愿意放弃 WCF,你可以让你的客户直接访问数据库。

如果您愿意放弃 Nhiberhate,您可以使用 WCF 数据服务。

于 2013-02-06T17:45:35.150 回答
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]s,并且Address是其中之一。因此将调用 getter,如果您仍在您的using (ISession)范围内,它将执行延迟加载。如果您不使用using范围而只是定义一个变量ISession(您可能不会关闭),那么惰性查询也将执行。

于 2013-02-06T17:52:31.450 回答