实体框架DbSet <?> - 编译时未知的数据库列名

Cod*_*aku 5 entity-framework dbcontext

所以我遇到了一种情况,我需要使用Entity Framework(DbContext)和数据库,这些数据库的列在编译时是未知的.基本上我没有将customTable类硬编码放入DbSet的奢侈.

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

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

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

如果我对实体框架的预期用途不感兴趣,那么信息也是有用的.

Jam*_*nes 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)
Run Code Online (Sandbox Code Playgroud)

其中“type”是保存新类型的变量。这可以使用动态 linq 库中的 linq 谓词来实现。

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

詹姆士