2012-02-20 59 views
1

我想我的EntityFramework對象集內刷新數據,但我收到以下錯誤:已經有一個用此命令,必須先關閉相關聯的打開的DataReader。刷新內ObjectContext的數據在實體框架

所以我有一個ObjectContext,它返回給我一個客戶的ObjectSet。然後,我將這些客戶列入網格。下面是我的方法的代碼段:()

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(),它爲我的網格提供結果。

我有在其上調用方法SelectRecordByUNID傳遞所選擇的行的客戶ID電網的SelectedIndex改變事件代碼。這將選擇在其他地方使用的客戶記錄。

現在,如果有人在其他地方更新數據(應用程序的另一個實例),我想刷新我的objectCustomer看到這些變化。

然而SelectRecords方法運行正常,但是當SelectRecordByUNID方法把它叫做失敗,我上面提到的錯誤。該錯誤說有一個關聯的DataReader已經用這個命令打開並關閉它。如何打開數據讀取器而不關閉數據讀取器,因爲打開了與客戶網格的數據源相關的其他數據?

我也使用myObjectContext爲不同的實體創建對象集。

我使用C#和.Net4.0

請幫助我,我希望是有道理的!?!

謝謝。

+0

可能重複[實體框架:已經有一個用此命令相關聯的打開的DataReader(http://stackoverflow.com/questions/4867602/entity-framework - 這是一個已經開放的數據讀取器 - 與這個逗號相關聯) – 2012-02-20 15:25:14

+0

不確定它是否誠實。我試過設置MultipleActiveResultSets = True,這沒有什麼區別。感謝您的回覆 – user1131661 2012-02-20 16:12:22

+0

在這種情況下,您必須在您的問題中提供更多信息,因爲您可能做錯了什麼。 – 2012-02-20 16:14:22

回答

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 2012-02-21 09:59:05