2011-12-20 15 views
0

今日私は、理由を正確に説明することができないという問題に直面したので、もっと良いのは、stackoverflowで共有することだと思います。objectContextライフスコープ

私は.NETエンティティを持つmvc 3アプリケーションを持っていて、巨大な文字列をdbに挿入しようとしましたが、これはsqlExeepton "文字列またはバイナリデータが切り捨てられます"を生成しました。ここまで、私はそれを後で修正します。

この問題の後、同じエンティティを単一の値で更新しようとしました(実際にはカウンタを増やしました)。同じ例外が再び発生しました。それはちょっと靴下だった。

各メソッドの最後にobjectContextを配置するか、各メソッドの開始時に新しいobjectContextを作成すると問題が解決されます。

私が理解することはできませんが、それはクラスで初期化取得した場合のObjectContextはなくメソッドの前に

​​

おかげ

それが取得する場合のObjectContextは反応しないか

答えて

0

を反応しない方法ですクラスで初期化されていますか?

コントローラクラスが存続する限り、1つのインスタンスが存在します。そして、これは1つのhttpリクエストの存続期間と一致し、ウェブアプリケーションをコーディングする際に推奨される有効期間です。

したがって、すべての単一のリクエストに対して新鮮なコンテキストを取得し、古いコンテキストオブジェクトに格納されている古い状態を気にする必要はありません。

+0

私はこれが推奨寿命であることに同意します。あなたが言ったように、それはすべての単一のhttp要求のために生きています。私の理解では、コントローラAを呼び出すと初期化されます。私がコントローラBを呼び出すと、コントローラAが配置され、コントローラBが初期化される。これが正しければ、コントローラAが破棄されて初期化されても例外が発生するのはなぜですか? – StrouMfios

+0

*コントローラB *を呼び出すとどういう意味ですか?コントローラークラスはインスタンス化され、アクションメソッドはフレームワークによって通常呼び出され、自分では呼び出されません。リクエストごとにdatacontextのインスタンスを1つ使用するようにしてください。私はDIコンテナを使用し、あなたの(基本)コントローラクラスのコンストラクタにインスタンスを挿入することをお勧めします。 – Jan

+0

私は、コントローラA /インデックスとコントローラB /インデックスの後にコントローラAが配置され、コントローラBが再び初期化されると言ってみましょう。私は間違った方法でそれらを理解していると仮定します。ところで、私はDI – StrouMfios

関連する問題