1

我有一个 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;
    }
}

我究竟做错了什么?

4

1 回答 1

3

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

这个问题很容易解决,无需谴责 LINQ to 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();
}
于 2012-08-30T06:13:50.503 回答