2009-07-26 16 views
3

TypesのリストをObjectContextからどのように抽出できますか?EntityFramework ObjectContextから型のコレクションを取得

たとえば、「Bank」という名前のエンティティと「Company」という名前のエンティティを含むオブジェクトコンテキストがあります。 私はそれらのEntityObject型を取得したいと思います。

どうすればいいですか?

答えて

5

EntityObjectクラスのリストを取得するために、実行時に生成されたObjectContextクラスをクエリしたいとします。その後、反射でエクササイズになり:

PropertyInfo[] propertyInfos = objectContext.GetType().GetProperties(); 
IEnumerable<Type> entityObjectTypes = 
    from propertyInfo in propertyInfos 
    let propertyType = propertyInfo.PropertyType 
    where propertyType.IsGenericType 
    && propertyType.Namespace == "System.Data.Objects" 
    && propertyType.Name == "ObjectQuery`1" 
    && propertyType.GetGenericArguments()[0].IsSubclassOf(typeof(EntityObject)) 
    select propertyType.GetGenericArguments()[0]; 

このコードはTEntityObjectのサブクラスですSystem.Data.Objects.ObjectQuery<T>を入力したオブジェクトコンテキスト上のすべてのパブリックプロパティを見つけます。

+0

の一つにこれをしなかったが:&& propertyType.Name ==「ObjectQuery' 1 "の場合、結果はOK、そうでない場合は何も返しません。あなたは説明できますか? –

+0

コンテキストにDbSetプロパティを持たない型をコンテキストに含めることはできますか? – MBoros

0

この行を削除する場合にのみ、あなたが動的データを使用している場合、これは容易になり、私はちょうど、EF4.0で我々のアプリ

MetaModel.GetModel(objectContext.GetType()).Tables.Select(t => t.EntityType); 
関連する問題