使用字符串从上下文中获取表

时间:2016-08-12 13:37:05

标签: c# entity-framework reflection

我试图将一个Entity Framework上下文传递给一个表单构造函数以及一个表名,但是我试图从上下文中获取表对象。 BindingSource的数据源应设置为此表的数据,DataGridView的DataSource绑定到BindingSource。

任何人都可以帮助获取表数据让我们说一个类型tableName的列表并填充dgv吗?

    $imagesPath = "/var/www/project/web/print/img/"; 
    $images = array(
            "###FRONTPAGE###"   => $imagesPath . "company_frontpage_2016.svg",
            "###LOGO###"        => $imagesPath . "company_logo.svg"
    );

    foreach( $images as $image => $imageFile ) {

        if ( is_readable( $imageFile ) ) {
            $base64String = base64_encode( fread( fopen( $imageFile, "r" ), filesize( $imageFile ) ) );
            $html = str_replace( $image, "data:image/svg+xml;base64," . $base64String, $html );
        } else {
            $html = str_replace( $image, "File nicht lesbar", $html );
        }
    }

感谢。

1 个答案:

答案 0 :(得分:0)

嗯,您可以使用上下文中的元数据执行此类操作:

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;
}

旁注:我假设您的T泛型类型具有如下通用约束:

public class YourContextWrapper<T> where T:DbContext