2016-03-25 7 views
3

各ループでEntity Framework SaveChanges()を呼び出そうとすると問題が発生します。例外は、 "新しいトランザクションがすでに別のスレッドに存在する間に"ということです。 Linqクエリからlstを取得する。だから私は内部ループの完了時にデータを保存したい。ありがとう。内部ループ内でsavechanges()を使用して保存しようとしたときにトランザクションエラーが発生する

foreach (keyword kwd in lst) 
{   
    foreach (DataRow row in dt.Rows) 
    { 
     //processing 
    } 
    //i need saving here.    
    db.SaveChanges(); 
} 
//not here. 

答えて

3

この行foreach (keyword kwd in lst)はエラーの原因となります。 IQueryableでは遅延実行が使用されるため、結果を反復するときにのみクエリが実行されます。あなたのケースでは、ループはforeachです。しかし、データをフェッチしている間は、すでにトランザクションを変更してデータベースに保存しています。これを解決するには、クエリを強制的に実行してから、ToListを呼び出します。

foreach (keyword kwd in lst.ToList()) 
{   
    foreach (DataRow row in dt.Rows) 
    { 
     //processing 
    } 
    //i need saving here.    
    db.SaveChanges(); 
} 
関連する問題