5

因此,我遇到了需要将实体框架(DbContext)与在编译时不知道列的数据库一起使用的情况。基本上我没有将customTable 类硬编码到DbSet 中的奢侈。

为了解决这个问题,我唯一能想到的就是使用 Reflection.Emit 在运行时根据我通过查询数据库收集的信息创建一个 customTable 类。

我无法找到解决此问题的任何信息,但我对使用实体框架非常陌生,因此对于更有经验的人来说,解决方案可能会更明显。

我觉得应该有比使用 Reflection.Emit 动态创建一个类来提供 DbSet 更清洁的方法。

如果我对实体框架的预期用途有很大的帮助,那么该信息也会很有用。

4

1 回答 1

0

嗨,我也在调查这个问题,我已经找到了解决方案。

http://romiller.com/2012/03/26/dynamically-building-a-model-with-code-first/

告诉您如何创建一个 DbContext,您可以使用类型作为参数向其中添加一个新的 DbSet。您可以使用动态 Linq 库创建此类型:

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

它有一个名为 CreateClass 的方法,它允许您从字段名称列表动态构建 POCO 类定义并加载它,然后您可以使用您创建的新类型创建 DbSet。

然后,您可以使用从更新的 DbContext 中获取非泛型 DbSet

db.Set(type)

其中 'type' 是一个保存新类型的变量。这可以使用动态 linq 库中的 linq 谓词来解决。

顺便说一句,我的应用程序适用于 CMS,其中新模块可以将字段添加到 CMS 的核心数据表中,我不想使用 DI,因为它太不灵活了,因为没有给定的模块能够提供包含所有它需要的字段和所有其他未知模块可能也需要。

詹姆士

于 2013-02-09T14:46:40.663 回答