2

Usingステートメントを使用すると、このエラーが発生します

DbContext が破棄されているため、操作を完了できません。

And While Use Without Using Not receive エラー このエラーの理由は何ですか?

using (var context = new ProCamContext())
{
    var q = context.CatCamera.Where(p => p.Category.Equals(value)).Select(p => p.CatDetails);
    return Json(q);
}
4

2 に答える 2

6

あなたの問題は間違いなくdeferred executionによるものです。

データベースへのトリップを強制するメソッドを呼び出すことにより、そのクエリを強制的に評価することが機能するはずです。ToList十分なはずです:

var q = context.CatCamera
    .Where(p => p.Category.Equals(value))
    .Select(p => p.CatDetails).ToList();

現在、クエリが評価されるまでに、コンテキストは破棄され、データベースを呼び出すことができません。したがって、エラー。

于 2013-08-12T05:27:56.600 に答える
1

クエリが実行される前に、コンテキストが破棄されました。 return Json(q)最初に実行せずにクエリ式を返しています。using スコープを終了する前に、実際にクエリを実行するために ToList() を呼び出してみてください。

using (var context = new ProCamContext())
{
    var q = context.CatCamera.Where(p => p.Category.Equals(value)).Select(p => p.CatDetails).ToList();
    return Json(q);
}
于 2013-08-12T05:28:36.743 に答える