2009-06-09 16 views
0

パスウェイテーブルのデータに直接関連するPathwayという名前のEntityObjectがあります。私のデータベースには、Pathwayのカスタマイズのためのルールも格納されています。私がしたいことは、Pathway + PathwayCustomisationsの結果であるPathwayオブジェクトをコード内に作成することです。その結果、データベースに戻ることは決してありません。単にコード内で使用される一時的な投影です。Entity Frameworkを使用した一時的なエンティティ

public static Pathway ApplyCustomisation(Pathway p, ICollection<PathwayCustomisation> c) 
{ 
    Pathway resultant = new Pathway(); 
    if (!p.PathwayModule.IsLoaded) p.PathwayModule.Load(); 
    foreach (PathwayModule m in p.PathwayModule) 
    { 
     resultant.PathwayModule.Add(m); 
    } 
    foreach (PathwayCustomisation i in c) 
    { 
     switch (i.Command) 
     { 
      case "ADD": 
       resultant.PathwayModule.Add(i.PathwayModule); 
       break; 
      case "DELETE": 
       resultant.PathwayModule.Remove(i.PathwayModule); 
       break; 
     } 
    } 
    return resultant; 
} 

彼らは唯一のモデル/データベースのいずれかに属することができたとき、私は第二の経路にPathwayModuleエンティティを追加していので、この方法は、最初のハードルでチョーク:

CoursePlanner.Test.PathwayTest.ApplyCustomisation: 
System.InvalidOperationException : Collection was modified; enumeration operation may not execute. 

仕事をする方法はありますエンティティの予測は簡単ですか?問題に適切に近づいていますか?

編集:方法のほんの最初の部分とするとき、私はまだ例外を取得

public static Pathway ApplyCustomisation(Pathway p, ICollection<PathwayCustomisation> c) 
{ 
    Pathway resultant = new Pathway(); 
    if (!p.PathwayModule.IsLoaded) p.PathwayModule.Load(); 
    foreach (PathwayModule m in p.PathwayModule) 
    { 
     resultant.PathwayModule.Add(m); 
    } 
    return resultant; 
} 

上記の列挙が列挙されているのと同じコレクションを変更していない、それは単に追加されますアイテムを第2のコレクションに追加する。このコードでも同じ例外が発生します。

.NET3.5、C#の、VSエクスプレス2008

おかげで、

ダニエル

答えて

2

あなたの例外は、それを列挙しながら、コレクションを・修正されていることに起因します。通常のオブジェクトのようなエンティティでの作業

foreach (Item item in collection) 
{ 
    collection.Add(something); // Not allowed. 
    collection.Remove(something); // Not allowed, too. 
} 

は問題ありません - あなただけのエンティティがオブジェクトコンテキストに接続されていることを避けなければならない(直接または間接的に関連するエンティティを介して)、彼らはデータベースに永続化されることはありません。

+0

私は最初はそれが問題であることを認識していますが、メソッドの最初の部分で例外が発生します(上記の私の編集を参照)。その列挙は、列挙されている同じコレクションを変更するものではなく、単にアイテムを2番目のコレクションに追加するだけです。このコードでも同じ例外が発生します。 –

+0

新しいPathwayを作成するにあたり、PathwayModuleを永続的に関連づけたり、既存のEntityとその関係を変更することは一切ありません。 –

+2

あなたのモデルはわかりませんが、多対多の関係船が関係していますか? relaltionshipの一端に何かを追加すると、もう一方の端も変更されます。 –

関連する問題