2016-07-18 2 views
0

エンティティフレームワークの基本クラスを含むアセンブリを読み込み、型情報を使用して同じクラスをアクティブ化または作成しようとしています。リフレクションを使用してエンティティフレームワークを照会する

タイプインフォメーションを使用して、データベース内のすべての列とデータを動的に照会してリストしたいと考えました。基本的には、すべてのテーブルの内容をリストする単一の場所。

次のようにいくつかのコード:

private Type GetInstanceType(string tableName) 
{ 
    return Assembly.Load("EntityFrameWorkDLLName").GetTypes().FirstOrDefault(t => t.Name == tableName);   
} 

public void GetEntityList(string name) 
{ 
    // the list method where I pass the table name to query table using the db context 
    var instanceType =GetInstanceType(name); 

     if (instanceType != null) 
     { 
      var obj = Activator.CreateInstance(instanceType) 
      db.obj.Select();// here I am stuck without knowing how to proceed 
    or db.Set<obj.GetType()> // this also fails with error '<' cannot be applied to operands of 'method group' and 'Type' 
     } 
} 

は私がやろうとしています何てもよいかなりばかげている、誰かが理由を指摘することができますか?ジェネリックスの型パラメータを表すために具体的なインスタンスの.gettypeを使用できるのであれば、どんなオブジェクトも動的に配置できます。私は質問の理由だと思う質問のこの部分に答えるために

+0

最終結果はどのように見えるのですか? – Win

+0

例えば、私がEF dllにあるテーブル名 "User"を渡すと、そのタイプはデータベースのUserテーブルに解決され、すべてのユーザデータがリストされます。 – RRR

+0

最終結果がユーザのリストである場合、** dbContext.Users **のようにEFを直接使用しないのはなぜですか?私はここで反射の必要性を見ていないよ。 – Win

答えて

0

...

私は動的に照会し、すべての 列とデータのリストに型情報を使用していましたデータベース。基本的には、すべてのテーブル をリストするための単一の場所。

代わりにデータベースでINFORMATION_SCHEMAを使用したと考えていますか?

SELECT * 
    FROM INFORMATION_SCHEMA.COLUMNS 
    ORDER BY TABLE_NAME 
+0

お返事ありがとうございます。私はそれがC#で動作する必要があります。私のテーブルはedmxで追加されて更新されますが、ef dllを参照するC#プロジェクトを変更したくありません。 URLを介して私はクエリに必要なテーブル名を送信し、型を推測して内容をリストすることができなければなりません。 – RRR

関連する問題