【问题标题】:Is it possible to use Entity Framework for unknown database tables?是否可以将实体框架用于未知数据库表?
【发布时间】:2011-08-19 15:55:15
【问题描述】:

用户选择一个数据库及其表,并将在 Web 应用程序中浏览该表。我可以使用实体框架来实现吗?我知道 EF 是 ORM 框架,但在这种情况下,我可能不会为每个选择创建 edmx 文件。即使我做到了,我如何根据表格动态创建 POCO 对象?在这种情况下我该怎么办?我必须使用低级 ADO.NET 吗?

【问题讨论】:

  • 如果它就像让用户选择一个表名并浏览它(选择 *)那么简单,为什么还要麻烦实体框架呢?应用程序是只读的,还是用户会对表进行更改?我也不认为 ADO.net 是低级的......
  • 您将如何填充用户可以从中选择的表列表?来自 sysobjects 表?
  • @mservidio,至于选择表格,任何方式都可以(下拉、列表框,甚至单选按钮)。到底是不是 EF 是我的问题。我的网格将是只读表。你的结论是什么?
  • 在另一个问题/答案 (stackoverflow.com/questions/7123326/…) 中,有人告诉我实现 IMetadataProvider 以读取表列表。
  • 我要说的是查询 sysobjects 表以获取所有表名。您可以轻松过滤从中返回的内容。然后只需构建一个查询字符串,并使用 ado.net 查询表以绑定到您的组件...另一个示例类似地使用 Information_Schema.Tables...同样的事情...

标签: c# asp.net entity-framework ado.net


【解决方案1】:

我认为在这种情况下实体框架是不必要的。 可能当然可以将 EF 用于这样的事情,但如果只是从数据库中获取可用表名列表并让用户选择要查看的表的简单情况,我只需执行以下操作:

在网站上创建下拉列表,并使用查询结果填充它:

SELECT table_name FROM INFORMATION_SCHEMA.TABLES t

然后在用户从下拉列表中选择一个项目后,您可以使用 Ado.net 绑定您的网格。比如:

string tableName = "get value from dropdown";  
DataTable dt = new DataTable();

using (SqlConnection conn = new SqlConnection("connection string here"))
{
    string sql = string.Format("select * from {0}", tableName);
    SqlDataAdapter da = new SqlDataAdapter(sql, conn);
    da.Fill(dt);
}

// bind dt to your grid or gui component here.

【讨论】:

  • 还有很多工作要做,但我认为您的方法是有道理的。谢谢
【解决方案2】:

编辑好吧,我知道您至少可以部分做到这一点。您绝对可以让用户选择数据库/表,因为您可以将自己的连接字符串/EntityConnect 对象提供给 Contexts 构造函数。我不确定如何动态创建实体,但我认为您必须拥有一个 edmx 文件,该文件已经生成了所有实体,或者自己从之前编写它们。

【讨论】:

  • 是的,我就是这么想的,也许我什至不想创建这些实体来进行浏览。
【解决方案3】:

您必须首先将 EF 指向每个数据库,而不是期望 EF 在您的应用程序中动态查看新数据库。

【讨论】:

  • 感谢您的回答。我想我明白你在说什么,但你能详细说明一下吗?
  • 没问题。我不明白 EF 如何为应用程序尚未意识到的数据库动态创建实体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
相关资源
最近更新 更多