2016-09-19 5 views
2

Entity Frameworkとは何かDbContextと、SaveChanges()でエラーが発生した後にエンティティが登録されます(たとえば、インデックスによって重複する行やタイムアウトが禁止されます)。それらはまだ使用可能か、あるいは不調和な状態にあり、捨てるべきですか?データベースエラーが発生した後でDbContextを安全に使用できますか

+0

これを参照してください:https://msdn.microsoft.com/en-us/data/jj729737.aspx – Sampath

答えて

1

元のエラーを修正すれば、それでも使用できます。タイムアウトの場合はもう一度やり直すことができますが、インデックスエラーのようなものであれば、SaveChangesを呼び出すと新しいトランザクションが開始され、変更を保存しようとすると問題が解決する必要があります。 1つの変更が失敗した場合、トランザクション全体がロールバックされます。

コンテキストを再利用せずに再利用する可能性は、アーキテクチャによって異なります。

たとえば

、あなたのような何かをやった場合:私は、コンテキストが閉じられているように(それはusingの終わりを打つときであるように)適切なエラー処理が所定の位置にあることを期待する

using (var context = GetContext()) 
{ 
    //do something that goes wrong 
} 

をし、とにかくコンテキストが利用できないようにエラーが表示されます。

コメントに関して編集

、時間の長い期間のためのオープンシングルコンテキストを有することはお勧めできません。 SQLサーバーは、接続のオープンとクローズを制御する独自の接続プーリングを使用しているため、必要に応じてコンテキストを開くだけでは遅くはありません。これにより、エラーの制御も良好になります。

+1

これはデスクトップアプリケーションであり、1つのウィンドウにつき1つのコンテキストを使用しているため、コンテキストはかなり長く生きています – Thomas

+2

研究に基づいて私はこの問題に取り組んできました.1つの文脈を長い間開いているのは悪いモデルです。必要なだけコンテキストを開いておいてください。 – webnoob

関連する問題