使用NHibernate的WCF服务中的问题

时间:2013-02-06 17:13:03

标签: c# wcf nhibernate

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

谢谢,伙计!!

2 个答案:

答案 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(您可能不会关闭),那么延迟查询也会执行。