1

プロジェクトに DI インジェクションを設定しました。これにより、リポジトリと Commit() メソッドを持つ IUnitOfWork の実装がインジェクトされます。これをビジネスレイヤーに挿入すると、すべてがうまくいきます。

public Business(IUnitOfWork context) {
    this.Context = context;
}

public IEnumerable<User> ExpiredUsers() {
    return this.Context.Users.Query().Where(u => u.Expired == true);
}

このビジネスクラスはコントローラーに注入されます

public class UsersController : Controller {
    public UsersController(Business business) {
        this.Business = business;
    }

    public ActionResult Home() {
        return View(new HomeViewModel(business.ExpiredUsers());
    }
}

Users は IQueryable であり、ビジネス メソッドは Entity Framework を使用して SQL にうまく変換されます。私の問題/懸念は、このメソッドが実行された後、ユーザーオブジェクトのプロパティを照会して遅延実行を引き起こすことです。私の場合、ビュー内の何かが各ユーザーの address.State.Cities、または遅延実行を引き起こし、データベースを n 回クエリする他のプロパティに入るとします。

Ninject を使用して、データベース コンテキスト (IUnitOfWork) が要求ごとに 1 回になるように DI を設定しました。データベース コンテキストがまだ開いているため、これを防ぐ方法がわかりません。私はむしろ例外をスローするビューを望みます。これらの問題を早期に発見できるように。完全を期すために、ここに私のモジュールがあります。

public class Module : NinjectModule
{
    public override void Load()
    {
        this.Bind<IUnitOfWork>().To<SqlUnitOfWork>().InRequestScope();
    }
}
4

1 に答える 1

-1

ToList() を呼び出して、ExpiredUsers に強制的にリストを列挙させます。

return this.Context.Users.Query().Where(u => u.Expired == true).ToList();
于 2013-04-22T03:55:57.597 に答える