具有Entity Framework Code Only和ASP.NET MVC的模块化应用程序

时间:2011-02-28 12:49:57

标签: .net asp.net-mvc entity-framework orm modularity

模块化应用程序是指可以在不修改核心应用程序代码的情况下扩展基本功能和数据模型的应用程序。

这是一种流行的方法,例如。像SugarCRM或VTiger这样的开源CRM。

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

当想要扩展基础应用程序的数据模型时出现问题。在实际框架中,模型定义集中在Edmx文件中是不可能的。此方法不允许添加将在新程序集中引用某个基本模块表的新表。

我注意到,Orchard CMS通过使用nHibernate实现了完全的模块化(这是有说服力的,因为他们拥有Microsoft支持并且该项目被视为技术展示)。由于POCO方法,Nhibernate允许这种模块化。每个实体/表都在一个单独的文件中定义,这显然是采用模块化应用程序的方式。

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

1 个答案:

答案 0 :(得分:3)

我使用EF Code First和核心模块上的GUI扩展点组合实现了这一点。结果是:

  • 每个模块作为独立应用程序 处理
  • 每个模块都有自己的数据库(因为代码首先丢弃并重新创建数据库)
  • 每个模块可能会复制另一个模块中的所需数据
  • 每个模块都是服务
  • 每个模块都可以通过IoC容器扩展GUI 扩展点
  • 模块可以通过异步消息传递(nServiceBus)和同步RPC (WCF)
  • 与每个模块进行通信

请注意,这是我们为SOA设计的企业应用程序。

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