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

时间:2013-01-31 20:30:50

标签: entity-framework dbcontext

所以我遇到了一种情况,我需要将Entity Framework(DbContext)与其编译时未知的数据库一起使用。基本上我没有将customTable类硬编码到DbSet中的奢侈。

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

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

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

如果我偏离实体框架的预期用途,那么信息也会有用。

1 个答案:

答案 0 :(得分:0)

您好我正在研究这个问题,我发现了解决方案。

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

告诉您如何使用类型作为参数创建添加新DbSet的DbContext。您可以使用Dynamic Linq Library创建此类型:

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,因为它太不灵活,因为没有给定的模块能够提供类型它拥有所需的所有领域,而且所有其他未知模块也可能需要。

詹姆斯