我有一个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;
}
}
我做错了什么?
答案 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();
}