2011-08-02 24 views
0

我仍然很難與Linq合作。 我需要寫一個更新函數tat接收一個包含列表的對象。其實,一個地區有一個城市列表。我想傳遞一個名稱爲「Region」的對象和一個城市列表。問題在於,城市物體來自另一個環境,我無法將它們附加到這個環境中。我一直在嘗試幾個函數,並總是得到一個錯誤,如「EntitySet在枚舉期間被修改」或其他。我正在努力使代碼在下面的工作,但如果任何人有不同的方法,請幫助。如何在對象有列表時創建LINQ中的更新函數?

public int Updateregion(region E) 
    { 
     try 
     { 
      using (var ctx = new AppDataDataContext()) 
      { 
       var R = 
         (from edt in ctx.regiaos 
         where edt.ID == E.ID 
         select edt).SingleOrDefault();    
       if (R != null) 
       { 
        R.name = R.name; 
        R.description = E.description; 
       } 
       R.cities = null; 
       R.cities.AddRange(Edited.Cities); 
       ctx.SubmitChanges(); 
       return 0 //OK! 
      } 
     } 
     catch (Exception e) 
     { 
      ...... 
     } 
+0

也許你們需要一些激勵?我很樂意將一公斤巴西美味咖啡郵寄給最好的解決方案。 – Fabio

回答

1

不能附上一個的DataContext檢索到另一個物體,它不是由LINQ到SQL支持。您需要以某種方式將對象從原始上下文中分離出來,但這也不受支持。人們可以不知道爲什麼一個dettach方法不可用,但至少你可以通過映射列表中新對象假貨:

var cities = Edited.Cities.Select(city => new City { 
    ID = city.ID, 
    Name = city.Name, 
    /* etc */ 
}); 

這裏的關鍵是要記住映射主鍵和沒有映射任何的關係屬性。它們必須設置爲空。在此之後,您應該能夠附加新的城市列表,並按預期工作。

+0

AHM,我試過了,它工作,但它看起來比它值得更多的麻煩,因爲它需要大量的代碼。如果我必須這樣做,我最好用ADO。有沒有其他方法? – Fabio

+0

據我所知,它是從上下文中分離實體的唯一方法,但我同意它很麻煩。如果你不想這樣做,你必須找到一種方法來從相同的上下文中獲取對象 - 但這可能會搞亂你的存儲庫模式,這也是不理想的。 – AHM

+0

也許你可以使用AutoMapper來使映射更簡單,但是你需要配置它來跳過關係屬性,所以它也不是很好。但至少你會在一個地方進行移民...... – AHM

相關問題