【问题标题】:Entity Framework code first adding models from other projects实体框架代码首先添加来自其他项目的模型
【发布时间】:2011-12-21 22:11:16
【问题描述】:

通常人们会编写它的模型类并创建一个带有多个 DbSet 的 DbContext 到相应的模型类,以首先在 EF 代码中创建数据库。

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

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

假设某个外部人员使用自己的数据库模型编写了一个插件(棱镜模块),并偏离了相应的 DbSet 定义。 如果该人将该 prism 模块 DLL 放在程序目录中,那么核心应用程序(在正常启动时)如何知道 prism 模块中的其他 DbSet 也需要在数据库中创建,如果它们不存在的话。 (以及如何添加它们?)

提前致谢。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    (详情:这样做的原因是,如果你想要外键,你必须对其他类有一些了解,例如 BillingModule 中的 Customer)。

    如果您不喜欢继承方式,您可以定义您在客户端使用部分类手动实现的接口(以后只在您的存储库中公开此接口)。我坚持这一点,现在我很高兴。不过现在还是我希望的样子。

    【讨论】:

    • hmmmm 所以实际上你是说我的问题不能先用 EF 代码完成?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    相关资源
    最近更新 更多