我想做的是操纵EF来支持访问共享数据库的插件。因此,数据库将包含主应用程序的所有表以及每个插件所需的所有表。由于应用程序对插件数据结构一无所知,所以它不能负责它们的管理。插件是唯一的责任,并创建表本身。但是,插件了解主机应用程序及其数据结构,因此理想情况下应该能够引用它们,甚至继承它们,从而生成一个可扩展但能够实现优化模式的数据库。
在EF中,这转换为包含适合主机的HostContext的DbSets。我认为,每个插件都应该有一个PluginContext,它继承自包含插件所需的DbSets的HostContext。然后,PluginContext中包含的实体类将能够引用HostContext实体和/或从这些实体继承,EF将能够解析表映射和关系。
我在用EF6。当我尝试上面的内容并试图列出我在PluginContext中包含的单个实体时,会抛出一个异常,抱怨该实体不存在。当然,没有创建匹配表。
我想要做的是得到EF的支持吗?如果是的话,我做错了什么?
发布于 2013-09-25 19:36:43
正如我在这里提到的:EF6 Empty Model target string,我使用Rowan的示例开始了这项工作:http://romiller.com/2013/02/15/extending-and-customizing-code-first-models-part-2-of-2/
最后,我放弃了这种方法,原因有几点: 1)我无法让它工作(我不清楚为什么,但我确实怀疑这与文章撰写以来EF的差异有关);2)我不喜欢编写手动迁移。
我最终使用了从PluginContexts继承的HostContext,正如我所希望的那样,并且能够引用甚至继承宿主实体。但这对其使用有限制:
这种方法被用来用内部插件扩展内部应用程序,因此在Rowan的解决方案可能更适合的其他场景中,采用这种方法可能不那么容易。
https://stackoverflow.com/questions/17865476
复制相似问题