1

对于业务应用程序,我提供了一个基本实体模型。此后,最终用户应该能够根据其特定需求扩展该模型。在应用程序运行时扩展实体框架模型

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

一个部分在于提供一种用于实体模型编辑的UI,而另一个是其后以反映在模型和数据库的变化。请提供建议。

编辑
- 一旦实体模型被编辑和保存,所有的EF设施应该像前。
- 型号更新在维护时进行,即未由业务用户使用。
- 可以编译受影响的项目并生成新的组件并投入使用。

回答

2

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

它一般是在客户端桌面上安装C#2010 Express和允许他们修改,重建和重新部署应用程序相同的要求。

编辑:

你想要什么,需要:

  • 对矫正EDMX - 非常复杂的XML文件。为此编写自定义工具将是一项复杂的任务。此外,你将不得不添加逻辑,这将不允许用户破坏应用程序。
  • 运行T4模板以生成新的或修改的实体。
  • 编译应用程序 - 如果用户进行修改会破坏构建?
  • 重新部署数据库 - 这本身非常糟糕,因为整个数据库生成逻辑是在Visual Studio中运行的工作流。此外,您需要另一个能够升级数据库的工作流程 - 默认情况下,只能部署新的空白数据库。这样的工作流程存在,但它需要VS 2010 Premium或Ultimate。
+0

感谢回答。我想我可以从这里删除一个约束,也就是说,改变我的应用程序模型(这是在应用程序维护期间完成的,这意味着当时没有用户可以访问应用程序),我可以编译受影响的项目并产生新的部件。现在有办法吗? – Kabeer 2011-03-03 13:39:06

+0

我向原始答复中添加了说明。 – 2011-03-03 13:51:24

+0

这听起来很难。首先,T4模板只能在Visual Studio中使用,并且在生产环境中使用Visual Studio不会太优雅。假设我使用数据库优先方法创建基本实体,我可以使用代码优先方法实现可扩展性吗?有没有一种方法可以将由代码优先方法生成的模型叠加在数据库优先模型上?此后,我是否能够使用单个上下文,以便尽管有两种方法,我可以为所有实体获取单个上下文?最后,你能想到超越EF的解决方案吗? – Kabeer 2011-03-03 14:03:21