4

私はNerd Dinnerコードを見てきましたが、彼らがモデルで行っていることの 1 つは、次のように DataContext のインスタンスを作成することです。

public class DinnerRepository {

    private NerdDinnerDataContext db = new NerdDinnerDataContext();

    public IQueryable<Dinner> FindUpcomingDinners() {
        return from dinner in db.Dinners
            where dinner.EventDate > DateTime.Now
            orderby dinner.EventDate
            select dinner;
    }

    // more methods below
}

これらは、次のようにコントローラーで使用されます。

public class DinnersController : Controller {
    DinnerRepository dinnerRepository = new DinnerRepository();

    public ActionResult Index() {
        var dinners = dinnerRepository.FindUpcomingDinners().ToList();
        return View("Index", dinners);
    }
}

しかし、NerdDinnerDataContext が破棄されることはないようです。これは私が心配すべき問題ですか?それともこのパターンでOK?

注: 最新の Nerd Dinner コードではありません。

4

2 に答える 2

4

一般に、DataContext オブジェクトを破棄することは、一般的なアプリケーションではやりたくないことがわかります。

詳細については、 http://mostlytech.blogspot.com/2008/01/linq-datacontextdispose.html (もちろん、Jon Skeet によるもの) を参照してください。

于 2009-11-20T17:02:17.457 に答える
0

この場合、これがベスト プラクティスです。リポジトリは IQueryable オブジェクトを返しています...これは、結果が必要になるまでクエリの処理が遅れることを意味します。

リポジトリ内のコンテキストを破棄すると、呼び出し元のコードが IQueryable オブジェクトから結果を取得しようとしたときに、DataContext が残らなくなります。

于 2009-11-20T17:00:46.383 に答える