2012-04-24 21 views
0

ページコントロールの名前に基づいてエンティティオブジェクトを選択する必要があります。Entity Framework - Reflection

私は文字列に基づいてエンティティにアクセスする必要がある2つのシナリオがあります(私は動的に選択していますがページ上に配置ユーザーコントロールの名前に基づいてこれら:

例1) - は、ここで私はしたいと思います何らかの形でdb.PersonalDetailsをdb.PersonalDetailsが変数である文字列置換に変更します。

EntityObject obj = null; 
obj = (from q in db.PersonalDetails where q.AppFormId==FormApplicationId select q).SingleOrDefault(); 

例2) ここで私は、この場合には、それはPersonalDetailであるが、私は、動的にこれを設定できるようにしたいと思い、動的に戻り型を設定したいです。私は型を取得するために反射を使用することができますが、その後、エラーとして "obj.GetType()"と言うことができません。

EntityObject obj = null; 
obj = returnUpdatedObj(obj) as PersonalDetail; 

ご協力いただければ幸いです。私はこの問題を説明するために必要な情報があれば、私に教えてください。

+0

これでも賢明な何かを言うために開始するあまりにも抽象的です。支援が必要なコードを表示してください。 –

+0

"obj.GetType()"とは意味がありません。 "as"は、静的型(コンパイラが知っている型)を変更するために使用されます。 "obj.GetType()"は動的な型を決定します。実際にコードを実行するまではobjがなく、動的型を変更するためにキャストする必要はありません。あなたがしようとしていること。私はあなたがしようとしているものを手に入れません。 – hvd

+0

私がやろうとしていること::私はページに表示する必要があるコントロールのリストを含むXMLファイルを持っています。コントロールの数と種類を動的に変更できるため、各コントロールは実行時に動的にロードされます。各コントロール名は同じ名前のSQL Serverテーブルと一致し、各コントロール入力フィールド名はテーブルの列と一致します。したがって、フォームが送信されると、コントロールをループして関連するエンティティを選択し、リフレクションを使用して、コントロール入力フィールドを実行し、エンティティフィールドを更新します。 –

答えて

0

については、私はthisブログの記事でここでやることができます。あなたは一般的な機能を必要とするように見える)expresionツリーを作成し、2の場合は

context.Set<T>.Where(expression); 

でその式ツリーを使用します。

private static T DoSomething<T>(T obj) 
    { 
     return obj; 
    }