使用实体框架代码和ASP.NET MVC的模块化应用程序

通过模块化应用程序,我的意思是可以扩展基本功能和数据模型的应用程序,而无需修改核心应用程序代码

这是一种比较流行的方法。 开源的CRM如SugarCRM或VTiger。

这种方法可以在asp.net mvc应用程序中使用Areas或(MVC contrib的可移植区域)来实现,它允许在单独的程序集中添加新的控制器和视图,而不会影响核心dll。

当需要扩展基础应用程序的数据模型时,就会出现问题。 对于模型定义集中在Edmx文件中的实体框架,在实际意义上是不可能的。 这种方法不允许添加一个新的表格来引用新程序集中的一些基本模块表格。

我注意到,Orchard CMS通过使用nHibernate实现了完全的模块化(这是说,鉴于他们有微软的支持,并且该项目意味着作为技术展示)。 由于POCO方法,Nhibernate可以实现这种模块化。 每个实体/表格都是在单独的文件中定义的,这显然是使用模块化应用程序的方式。

然而,使用实体框架代码方法有一个希望,它使用POCO定义在运行时生成Edmx模型。 有没有人尝试过这种方法来将数据模型的定义分布在单独的可插拔项目中?


我已经使用EF Code First和核心模块上GUI扩展点的组合实现了这一点。 它导致:

  • 每个模块都视为一个独立的应用程序(GUI除外)
  • 每个模块都有自己的数据库 (因为代码首先删除并重新创建数据库)
  • 每个模块可以在另一个模块中复制所需的数据
  • 每个模块都是一项服务
  • 每个模块都可以通过IoC容器通过核心扩展点扩展GUI
  • 模块可以通过异步消息传递 (nServiceBus)和同步RPC (WCF)
  • 请注意,这是我们为SOA设计的企业应用程序。

    使用EF Code First,如果您手动管理数据库(即不要删除和重新创建),则可以采用上面的一些概念并简化它。 您可能需要一个自定义IDatabaseInitializer来支持它,但它应该是可能的。

    链接地址: http://www.djcxy.com/p/4961.html

    上一篇: Modular applications with Entity Framework Code Only and ASP.NET MVC

    下一篇: Loop through an array of strings in Bash?