I have a UnitOfWork/Service pattern where I populate my model using NHibernate before sending it to the view. For some reason I still get the YSOD, and I don’t understand why the object collection is not already populated.
My controller method looks like this:
public ActionResult PendingRegistrations()
{
var model = new PendingRegistrationsModel();
using (var u = GetUnitOfWork())
{
model.Registrations = u.UserRegistrations.GetRegistrationsPendingAdminApproval();
}
return View(model);
}
The service/unit of work looks like this:
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;
}
}
What am I doing wrong?
The problem you are having is no different than the problem you would have with any other LINQ provider. You need to execute your query in order to get the results. If you don’t have a valid context, that won’t work.
This problem is easy to fix without condemning LINQ to NHibernate. Just change
to