1

ビューに送信する前にNHibernateを使用してモデルにデータを入力するUnitOfWork/Serviceパターンがあります。なんらかの理由でまだ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を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 に答える