2012-02-20 6 views
1

EntityFrameworkオブジェクトセット内のデータを更新しようとしていますが、次のエラーが表示されます。このコマンドに関連付けられている開いているDataReaderがあります。エンティティフレームワークのObjectContext内のデータを更新する

私は顧客のObjectSetを返すObjectContextを持っています。その顧客のリストは、私はグリッドに固執します。以下は私の方法からの抜粋です:

public class CustomerEntity : SECValidation.SECEntity 
{ 
    ObjectSet<Customer> objectCustomer; 

    public override void InitialiseObject() 
    { 
     objectCustomer = myObjectContext.CreateObjectSet<Customer>("Customers"); 
     objectCustomer.MergeOption = MergeOption.OverwriteChanges; 
    } 

    public override List<T> SelectRecords<T>() 
    { 
     return (from custDetails in objectCustomer.Include("Owner_Lookup") 
      .Include("Business_Type_Lookup").Include("Assets").Include("Client") 
      select custDetails).Cast<T>().ToList(); 
    } 

     public override T SelectRecordByUNID<T>(int UN_ID) 
     { 
      return (from custDetails in objectCustomer.Include("Owner_Lookup").Include("Business_Type_Lookup").Include("Assets").Include("Client") 
        where custDetails.UN_Customer == UN_ID 
        select custDetails).Cast<T>().SingleOrDefault(); 
     } 
} 

だから私は)私のCustomerEntityクラスのインスタンスを作成し、(InitialiseObjectを呼び出します。その後、SelectRecords()を呼び出してグリッドの結果を返します。

選択された行のcustomerIDで渡すメソッドSelectRecordByUNIDを呼び出すグリッドのSelectedIndex changedイベントにコードがあります。これは、他の場所で使用されている顧客レコードを選択します。

誰かが他の場所(アプリケーションの別のインスタンス)でデータを更新した場合、私はそれらの変更を見るためにobjectCustomerを更新したいと思います。

ただし、SelectRecordsメソッドは正常に実行されますが、SelectRecordByUNIDメソッドが呼び出されると、上記のエラーで失敗します。このエラーは、このコマンドですでに開いている関連するDataReaderがあり、それを閉じることを示します。顧客グリッドのデータソースに関連する他のデータが開かれているので、データリーダーを閉じずにこれをどのように丸めることができますか?

myObjectContextを使用して、異なるエンティティ用のオブジェクトセットも作成します。

私は私を助けてくださいC#と.Net4.0

を使用していると私はそれが理にかなって願っています!?!

ありがとうございました。

+0

可能重複[Entity Frameworkの::このコマンドに関連付けられているオープンのDataReaderが既にあり](http://stackoverflow.com/questions/4867602/entity-frameworkあなたはとても代わりにこれを試してとにかくクエリを実行していますこれはコンマで結ばれています。 –

+0

正直であるかどうかわかりません。 MultipleActiveResultSets = Trueを設定しようとしましたが、違いはありません。あなたのお返事ありがとう – user1131661

+0

このような場合は、おそらく間違っていると思われるので、あなたの質問に詳細を記入する必要があります。 –

答えて

0

クエリがToListおよびDataReaderで実行されているために異常なエラーが発生しました。

この場合、Refreshを使用しないでください。

public override List<T> SelectRecords<T>() 
{ 
    objectCustomer.MergeOption = MergeOption.OverwriteChanges; 
    return (from custDetails in objectCustomer.Include("Owner_Lookup") 
     .Include("Business_Type_Lookup").Include("Assets").Include("Client") 
     select custDetails).ToList(); 
} 
+0

返事をありがとう。これは私の顧客のグリッドではうまくいきましたが、それ以外のところではエラーを押してしまったようです。私はこれを反映するように仕事を更新しました。再度、感謝します – user1131661

関連する問題