2016-08-12 35 views
2

フォームのコンストラクタにテーブル名とともにEntity Frameworkコンテキストを渡そうとしていますが、コンテキストからテーブルオブジェクトを取得しようとしました。 BindingSourceのデータソースをこのテーブルのデータに設定する必要があります.DataGridViewのDataSourceはBindingSourceにバインドされています。文字列を使用してコンテキストからテーブルを取得する

テーブルのデータを取得してtableNameのタイプのリストを作成し、dgvにデータを移すのを手伝ってもらえますか?

ありがとうございます。

public MyForm(T context, string tableName) 
{ 
    ObjectContext objectContext = ((IObjectContextAdapter)breezeContext).ObjectContext; 
    var items= objectContext.MetadataWorkspace 
          .GetItems(System.Data.Entity.Core.Metadata.Edm.DataSpace.CSpace) 
          .Where(b => b.BuiltInTypeKind == BuiltInTypeKind.EntityType) 
          .ToList(); 
    var dbSetPropertyType = breezeContext.GetType() 
              .GetProperties() 
              .FirstOrDefault(x => x.Name == tablename);// tablename must match with the DbSet property in your context 
    var dbset = breezeContext.Set(dbSetPropertyType.PropertyType.GenericTypeArguments.FirstOrDefault()); 

    bindingSource.DataSource = dbset; 
    dgvDataviewer.DataSource = bindingSource; 
} 

側注

+1

これについては何が問題になりませんか?不動産を見つけられないのですか?テーブル名がプロパティ名と一致していますか? EFでは、テーブル名が複数のものにデフォルト設定されています。 – Max

+0

テーブルからデータを戻していません。はい、名前が一致する、私は行方不明だが、私はそれを把握することはできません。たぶん答えはGetGetMethodにあり、それをいくつか呼び出す方法は? – cdsln

+0

'table'は' PropertyInfo'でなければならないので、データを取り出す必要があります。 'GetGetMethod'を呼び出すと、' DbSet 'が得られます。これにより、より多くのリフレクションを使って値を引き出すことができます。 – Max

答えて

0

さて、あなたはあなたの文脈からメタデータを使用して、このような何かを行うことができ、私はあなたのTジェネリック型を想定しています持っている。このような一般的な制約:

public class YourContextWrapper<T> where T:DbContext 
関連する問題