2011-12-19 4 views
1

私はEntityFrameworkとIRepositoryパターンを使用しており、すべてのEntityCollectionにいくつかのイベントを追加する必要があります。ObjectSetのObjectSetのリストとObjectSetのEntityCollections

ObjectContextにコレクションのリストを取得する方法はありますか?
また、ObjectSet/EntityCollection上のすべてのコレクションを取得する方法が必要です。それは可能ですか?

私の最終目標は、すべてのコレクションとサブコレクションを繰り返し、すべてのサブコレクションにAssociationChangedイベントを追加することです。リレーションシップが削除されると、オブジェクトのdeleteが呼び出されます。

これは、EF does not support connectionless deletes(少なくともコネクションレスの更新と挿入をサポートしていないもの)を補うためです。

答えて

3

することはでき得る、次の未テストのコードを使用してObjectSets:

var objSetProps = instanceOfObjectContext.GetType().GetProperties().Where(prop => prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(ObjectSet<>)); 

foreach(PropertyInfo objSetProp in objSetProps) 
{ 
    var objSet = objSetProp.GetValue(instanceOfObjectContext, BindingFlags.GetProperty, null, null, null); 
} 

それobjectSetとは、ジェネリックで、ジェネリック型の変数を扱うので、あなたがインスタンスを持っていたら、トリックはobjectSetとで作業することになるだろうことができますそれらを定義するためにどのタイプが使用されたのかわからないときは、あまり明白ではありません。

オブジェクトセットでエンティティコレクションを取得する場合は、同様のアプローチをとることができますが、現時点ではこれを行う例はありません。あなたに適用されるパラメータの種類を与えるどの

propertyInfo.PropertyType.GetGenericArguments(); 

:あなたは以下を実行し、一般的なpropertyinfoタイプ内基になる型を確立するために、私の場合には、objectSetとアプローチに関する上記の回答に拡張するために

+0

これはいいですが、オブジェクトをObjectSetとして参照することができないため、最終的には機能しません。 (varは 'object'に相当します。)また、コンパイル時に型がわからないので(ObjectSetは汎用でなければなりません)、そのオブジェクトセットからEntityCollectionsのリストを取得する方法はありません。 – Vaccano

2

実行時にこの特定のジェネリック型。最初の場所で、ここで私を得た者上記M.バブコックへ

propertyInfo.PropertyType.GetGenericArguments().First(); 

ありがとう:EntityFrameworkこれらObjectSetsが唯一の基礎となるオブジェクトの種類は、単純になります見つけるためにそう単一のパラメータをサポートするために、私は信じています。

関連する問題