实体框架代码首先从其他项目添加模型

时间:2011-12-21 22:11:16

标签: database entity-framework entity-framework-4.1 prism code-first

通常会编写其模型类并使用几个DbSet创建一个DbContext到相应的模型类,以便首先在EF代码中创建数据库。

Prism库允许您创建模块。模块存在于同一解决方案中,但作为解决方案中的另一个项目,或者它可能是来自另一个解决方案的DLL。

我现在的问题:如果你有一个prism模块(一个独立的项目)有自己的模型(和DbSet定义)怎么办? 如何从该模块添加或注入(或让EF发现)这些模型类和DbSet并将它们添加到现有EF数据库中?

让我们说一些外部人员使用自己的数据库模型编写一个插件(一个prism模块),然后使用相应的DbSet定义。 如果那个人在程序目录中删除了prism模块DLL,那么核心应用程序(通常在启动时)如何知道还有其他来自prism模块的DbSet,如果它们还不存在,还需要在数据库中创建。 (它们如何添加?)

提前致谢。

有人可以提供如何执行此操作的代码示例吗?我在考虑MEF属性[ImportMany]和[ExportMany],但我不确定这是否可行。

1 个答案:

答案 0 :(得分:0)

我最近遇到了这个问题,并没有找到令人满意的解决方案。

问题是,特别是如果您使用RIA服务,所有类都需要在编译时就位,以便Visual Studio可以为您生成代码。我找到的唯一解决方案是继承,但我放弃了这个想法,因为它引入了许多有效的问题。如果不使用抽象类,RIA服务甚至可以复制继承结构。但是你仍然需要一个你想要的每个实体的基类(例如主模块中的CustomerBase - >客户:CustomerModule中的CustomerBase)。

(详情:原因是如果你想要外键,你必须知道另一个类,例如BillingModule中的Customer)。

如果您不喜欢继承方式,则可以使用部分类定义在客户端上手动实现的接口(以后只在您的存储库中公开此接口)。我坚持下去,现在我很开心。现在仍然是我希望的方式。