会议结束! NHibernate不应该试图抓取数据

时间:2012-08-30 01:48:45

标签: c# asp.net-mvc linq nhibernate eager-loading

我有一个UnitOfWork / Service模式,在将模型发送到视图之前,我使用NHibernate填充我的模型。由于某种原因,我仍然得到YSOD,我不明白为什么对象集合尚未填充。

我的控制器方法如下所示:

public ActionResult PendingRegistrations()
{
    var model = new PendingRegistrationsModel();
    using (var u = GetUnitOfWork())
    {
        model.Registrations = u.UserRegistrations.GetRegistrationsPendingAdminApproval();
    }
    return View(model);
}

服务/工作单元如下所示:

public partial class NHUserRegistrationRepository : IUserRegistrationRepository
{
    public IEnumerable<UserRegistration> GetRegistrationsPendingAdminApproval()
    {
        var r =
            from UserRegistration ur in _Session.Query<UserRegistration>()
            where ur.Status == AccountRegistrationStatus.PendingAdminReview
            select ur;
        NHibernateUtil.Initialize(r);
        return r;
    }
}

我做错了什么?

1 个答案:

答案 0 :(得分:3)

您遇到的问题与您使用任何其他LINQ提供程序时遇到的问题没有什么不同。您需要执行查询才能获得结果。如果您没有有效的上下文,那将无效。

这个问题很容易修复而不会谴责LINQ到NHibernate。只需改变

public IEnumerable<UserRegistration> GetRegistrationsPendingAdminApproval()
{
    var r =
        from UserRegistration ur in _Session.Query<UserRegistration>()
        where ur.Status == AccountRegistrationStatus.PendingAdminReview
        select ur;
    NHibernateUtil.Initialize(r);
    return r;
}

public IEnumerable<UserRegistration> GetRegistrationsPendingAdminApproval()
{
    var r =
        from UserRegistration ur in _Session.Query<UserRegistration>()
        where ur.Status == AccountRegistrationStatus.PendingAdminReview
        select ur;
    NHibernateUtil.Initialize(r);
    return r.ToList();
}