2011-08-02 11 views
0

私はまだLinqに苦労しています。 私は更新関数を書く必要があります.tatは、リストを持つオブジェクトを受け取ります。実際、地域には都市のリストがあります。私は、名前のフィールドと都市のリストを持つオブジェクト "Region"を渡したいと思います。問題は、都市のオブジェクトが別のコンテキストから来ているため、私はこのコンテキストにそれらを付けることができません。私はいくつかの関数を試していて、 "EntitySetは列挙中に変更されました"というようなエラーが常に出ます。私は下のコードを作ろうとしていますが、誰かが別のアプローチをしていれば助けてください。あなたはそれがLINQのツーSQLでサポートされていない、別のDataContextのから取得したオブジェクトを添付することはできませんオブジェクトにリストがあるときに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

多分あなたにはいくつかのインセンティブが必要ですか?ブラジルのグルメコーヒー1kgを最高の解決策に喜んでお送りします。 – Fabio

答えて

1

。何らかの形で元のコンテキストからオブジェクトを削除する必要がありますが、これはサポートされていません。新しいオブジェクトにリストをマッピングすることによってそれをdettach方法が利用できない理由の一つは疑問に思うことができますが、少なくとも、あなたは偽物でき:

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

ここで重要なのは、主キーをマップするために覚えておくことで、のいずれかをマップしません関係プロパティそれらはnullに設定する必要があります。この後、新しい都市リストを添付して期待どおりに機能させることができるはずです。

+0

AHM、これを試してみましたがうまくいきましたが、膨大な量のコードが必要なので、それは価値があるよりもはるかに多くの問題を抱えています。もし私がこれをしなければならないなら、私はADOで一層良くなるでしょう。他の方法はありますか? – Fabio

+0

私が知る限り、それはエンティティをコンテキストから切り離す唯一の方法ですが、私はそれが煩わしいことに同意します。これをやりたくない場合は、同じコンテキストからオブジェクトを取得する方法を見つけなければなりませんが、それはリポジトリパターンを乱す可能性があり、理想的でもありません。 – AHM

+0

AutoMapperを使ってマッピングを簡単にすることは可能かもしれませんが、relationpropertiesをスキップするように設定する必要があります。しかし、少なくともあなたは1つの場所に設定を持っていたでしょう... – AHM

関連する問題