【问题标题】:Extending Entity Framework Model at application runtime在应用程序运行时扩展实体框架模型
【发布时间】:2011-03-03 13:00:08
【问题描述】:

对于业务应用程序,我提供了一个基本实体模型。此后,最终用户应该能够根据自己的特定需求扩展模型。

对于基本模型,我想使用数据库优先的方法。但我不知道如何适应允许用户扩展它。

一个是为实体模型编辑提供一个UI,另一个是反映模型和数据库的变化。请提出建议。

编辑
- 编辑并保存实体模型后,所有 EF 工具都应该像以前一样工作。
- 模型更新在维护时进行,即业务用户未使用它。
- 可以编译受影响的项目并生成新的程序集并投入使用。

【问题讨论】:

    标签: entity-framework entity-framework-4 model data-modeling extensibility


    【解决方案1】:

    这是不可能的。当您修改实体模型时,您必须修改相关的实体类(或创建新的)=>您必须重新编译应用程序或使用一些动态程序集。此外,没有 API 可以在运行时修改实体映射,因此您将构建新的实体设计器。

    这通常与在客户端桌面上安装 C# 2010 Express 并允许他们修改、重建和重新部署您的应用程序的要求相同。

    编辑:

    你想要的需要:

    • 修改 EDMX - 非常复杂的 XML 文件。为此编写自定义工具将是一项复杂的任务。此外,您必须添加不允许用户破坏应用程序的逻辑。
    • 运行 T4 模板以生成新的或修改的实体。
    • 编译应用程序 - 如果用户做出的更改破坏了构建怎么办?
    • 重新部署数据库 - 这本身就很糟糕,因为整个数据库生成逻辑是在 Visual Studio 中运行的工作流。此外,您需要另一个能够升级数据库的工作流程 - 默认一个只能部署新的空白数据库。存在此类工作流程,但需要 VS 2010 Premium 或 Ultimate。

    【讨论】:

    • 感谢您的回复。我想我可以从这里删除一个约束,即更改我的应用程序模型(这是在应用程序维护期间完成的,这意味着当时没有用户可以访问应用程序)我可以编译受影响的项目并产生一个新的部件。现在有办法吗?
    • 我在原始答案中添加了描述。
    • 这听起来很难。首先,T4 模板只能与 Visual Studio 一起使用,并且在生产机器上使用 Visual Studio 就不会那么优雅了。因此,假设我使用数据库优先方法创建基本实体,我可以使用代码优先方法实现可扩展性吗?有没有办法将代码优先方法生成的模型叠加到数据库优先模型上?此后,我是否能够使用单个上下文,以便尽管有两种方法,但我可以获得所有实体的单个上下文?最后,你能想到 EF 之外的解决方案吗?
    • 代码优先意味着编写代码以更改映射(模型),并且您再次遇到升级现有数据库的问题。我不知道你想要达到什么(以及为什么),所以我无法提出任何其他解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    相关资源
    最近更新 更多