2010-12-13 8 views
0

私はEFとSQLを実行中に問題があります。私はC#コード(EF/LINQ)にうまく翻訳されない狂ったストアドプロシージャを持っています。基本的には、私が行うことは、SqlConnectionとSqlCommand(System.Data.SqlClient)コール(以下を参照)でストアドプロシージャを呼び出し、EFを使用してテーブルからデータをプルすることです。これは、メインテーブルが空になるまで繰り返されます。 (私は数十万のレコードを持つメインテーブルを持っており、格納されたprocはそれの小さな部分を引っ張って処理するテーブルに置きます。一度処理されると、それらのレコードはメインテーブルから削除され、メインテーブルは完全に処理されています)。SQL呼び出しで更新するとき、EFでテーブルが更新されませんか?

テーブルがC#で更新されることはありませんが、バックエンドでは更新されています。

だからここにSQL呼び出しの:

SqlConnection sqlConn; 
    SqlCommand sqlCommand; 

    using (sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["AppMRIConnection"].ConnectionString)) 
    { 
     using (sqlCommand = new SqlCommand(String.Format("EXEC sp_PullFinalDataSetPart '{0}', '{1}'", sLocation, sOutputFileType), sqlConn)) 
     { 
      sqlConn.Open(); 
      sqlCommand.ExecuteNonQuery(); 
      sqlConn.Close(); 
     } 
    } 

X新しいレコードでそれFinalDataSetPartテーブルと再ロードを切り捨てます。

これは、C#でのコール

List<FinalDataSetPart> lstFinalPart = db.FinalDataSetPart.ToList(); 

この呼び出しは常に最初finaldatasetpartテーブルは関係なく、テーブルに実際にあるもののロードされますです。その呼び出しはループ内で正しく行われます(コードに侵入し、ループの繰り返しごとにそのメソッドを呼び出すことができます)。

誰もこれのようなものを見たことがありますか?

ご意見、ご協力、ご鞭撻をよろしくお願い申し上げます。

ありがとうございます!

+1

私は、SQLプロファイラの起動といくつかの監視をお勧めします。あなたのEFコンテキストが最初の呼び出しを行うだけで、後続の呼び出しが現在メモリにあるオブジェクトを単に返すことも可能です。 – e36M3

答えて

0

新しいデータをプルするときに、一時テーブルでIDの変更を行いますか?プライマリIDが変更されない場合、EFはデータへの変更を検出しません。

新しいデータを取得するたびにコンテキストを再作成しますか?

+0

ええ、私は、コンテキストを削除して再作成する必要がありました。私はそのステップを逃していたと思います!ありがとう! – SlackerCoder

関連する問題