【问题标题】:Using Reflection to query an entity framework使用反射查询实体框架
【发布时间】:2016-07-18 13:51:02
【问题描述】:

我正在尝试读取包含实体框架的基类的程序集,并使用类型信息来激活或创建相同的类。

我想使用类型信息来动态查询和列出数据库中的所有列和数据。基本上是一个放置所有表格内容的地方。

部分代码如下:

 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 来代表泛型中的类型参数会不会很好,因为那么任何对象都可以动态挂钩?

【问题讨论】:

  • 最终结果应该是什么样子?
  • 例如:如果我传入我的 EF dll 中存在的表名“用户”,那么该类型将解析为数据库中的用户表并列出所有用户数据。
  • 如果最终结果是用户列表,为什么不像dbContext.Users那样直接使用EF呢?我没有看到这里需要反思。
  • 今天我知道用户,明天它可以是任何东西。我不想单独对用户进行硬编码。我希望代码推断表类..
  • 如果您在设计时不知道表名,则无法使用实体框架。恐怕您将不得不使用存储过程或即时生成 SQL 查询。

标签: c# .net entity-framework generics


【解决方案1】:

回答这部分问题,我认为这是问题的原因......

我想使用类型信息来动态查询和列出所有 数据库中的列和数据。基本上是一个放置列表 所有表格。

您是否考虑过只在数据库上使用 INFORMATION_SCHEMA?

SELECT *
  FROM INFORMATION_SCHEMA.COLUMNS
  ORDER BY TABLE_NAME

【讨论】:

  • 感谢您的回复。我需要它在 C# 上工作。我的表将在 edmx 中添加和更新,但我不想更改引用 ef dll 的 C# 项目。通过 url 我发送我需要查询的表名,我必须能够推断类型并列出内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多