所以我遇到了一种情况,我需要将Entity Framework(DbContext)与其编译时未知的数据库一起使用。基本上我没有将customTable类硬编码到DbSet中的奢侈。
我唯一能想到的解决这个问题的方法是使用Reflection.Emit在运行时根据我通过查询数据库收集的信息创建一个customTable类。
我无法找到解决此问题的任何信息,但我对使用实体框架非常陌生,因此对于经验丰富的人来说,解决方案可能更为明显。
我觉得应该有一种更简洁的方法,而不是使用Reflection.Emit动态创建一个类来提供DbSet。
如果我偏离实体框架的预期用途,那么信息也会有用。
答案 0 :(得分:0)
您好我正在研究这个问题,我发现了解决方案。
http://romiller.com/2012/03/26/dynamically-building-a-model-with-code-first/
告诉您如何使用类型作为参数创建添加新DbSet的DbContext。您可以使用Dynamic Linq Library创建此类型:
它有一个名为CreateClass的方法,它允许您从字段名称列表中动态构建POCO类定义并加载它,然后您可以使用您创建的新类型创建DbSet。
然后,您可以使用
从更新后的DbContext中获取非泛型DbSetdb.Set(type)
其中'type'是包含新类型的变量。这可以在动态linq库中使用linq谓词。
顺便提一下,我的应用程序是用于CMS,其中新模块可以将字段添加到CMS的核心数据表中,我不想使用DI,因为它太不灵活,因为没有给定的模块能够提供类型它拥有所需的所有领域,而且所有其他未知模块也可能需要。
詹姆斯