0

私は時々、データベースへのアクセスを失う Web サイトを持っています。Web サイトは引き続き IIS で実行されており、問題なくフロント ページにアクセスできます。

開発やテストではこのエラーに遭遇したことはなく、ライブでのみ発生しました。

私の最初にログに記録された例外は、常に InvalidCastException のようで、次のスタック トレースがあります。

06-03-2013 09:06:26 
The exception was: Specified cast is not valid.
at System.Data.SqlClient.SqlBuffer.get_Int32()
at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i)
at Read_Question(ObjectMaterializer`1 )
at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext()
at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
at System.Data.Linq.EntityRef`1.get_Entity()
at DB.TempQuestion.get_Question() in xxxx\DBLinq.designer.cs:line 9808
at xxxx.TestController.BuildBarHelperForPersonAssignment(PersonAssignment pa) in xxxx\TestController.cs:line 751
at xxxx.TestController.BuildMovieModel(TempMovie tm, PersonAssignment pa) in xxxx\TestController.cs:line 792
at xxxx.TestController.ShowMovie(TempMovie tm, PersonAssignment pa) in xxxxx\TestController.cs:line 636
at xxxx.TestController.Index(String id, FormCollection form, Nullable`1 currentid, String type, Int32[] selectedTest) in xxxx\TestController.cs:line 313

この後、あらゆる種類の InvalidCastExceptions と「サーバーはトランザクションを再開できませんでした」というエラーが発生します。

エラーが発生した場所は非常に明確です。私の問題は、なぜこれが起こっているのか、なぜアプリケーションがデータベースへのアクセスを失うのかということです?

エラーはこのすべての前のどこかにあると思います。

私のアプリケーションのセットアップ:

ASP.NET MVC2、LINQ2SQL、MsSQL サーバー 2008 R2、IIS 7.5 (ASP 2.0)

私のコントローラーのセットアップ:

コントローラーを再設計する必要があるのではないかと心配しています。コントローラーはほとんどすべてこのように見えます。

[Authorize(Roles = "xxxxx")]
Public class ABController : Controller
{
    private readonly DBLinqDataContext _db = new DBLinqDataContext();

    public ActionResult Index()
    {
        ...
    }
}

DBLinqDataContext が閉じられていないために、このエラーが発生する可能性はありますか?

次のオーバーライドされたメソッドを追加すると役立つでしょうか?

    protected override void Dispose(bool disposing)
    {
        _db.Dispose();
        base.Dispose(disposing);
    }

さらに情報が必要な場合はお知らせください。

4

2 に答える 2

0

解決した...

それは、複数の破棄されていないdataContextが原因でした

于 2013-03-07T22:09:41.713 に答える
0

TempQuestionのプロパティ タイプの1 つをintから何かに変更し、対応するテーブル列のタイプを変更するのを忘れたようです。

于 2013-03-06T19:30:58.390 に答える