在Azure上的两个ASP.NET MVC 3应用程序之间共享数据库

时间:2012-02-12 05:21:05

标签: asp.net-mvc-3 entity-framework-4 azure azure-sql-database

(我很难对问题进行标题,因此可以随意提出修改)

情况就是这样:我们刚刚开始构建一个系统,该系统由在Azure上运行的两个集成的MVC 3 Web应用程序和一个共享的AzureSQL数据库组成。运行两个应用程序而不是一个应用程序有很多原因,我宁愿不进入...

最初,数据库是从MVC应用程序“A”首先创建的。所有创建的实体中有75%将与应用程序“B”相关,而应用程序“B”将需要一些特定于它的实体。

目前,实体定义类已被提取到类库中,因此在应用程序“A”解决方案中允许在应用程序“B”中重用。但我仍然不确定如何添加申请“B”所需的实体......

问题是:在这种情况下管理数据库开发/管理的最佳方法是什么?具体而言,实体的定义应该在哪里?我们应该只有一个单独的数据库项目来定义数据库并使用db-first工作吗? (在这个阶段,这个选项是我的首选)。

由于两个开发人员(我和其他开发人员)都是MVC和EF的新手,所以我们非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

没有看到你的东西在我的大脑中没有完全映射 - 但我想我可能对此有所了解。

您是否可以创建包含您的实体框架edmx(或代码优先)和poco模板的模型(数据访问层)的其他项目。这个项目将由两个应用程序共享 - 即两个项目都得到这个程序集,并且都在web.configs中有ef连接字符串。

另一种方法是将所有代码放在一个项目中(whatever.domain,whatever.models等)。然后,您的映射代码将进入您的DataAccess项目

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {            
            modelBuilder.Conventions.Remove();
            modelBuilder.Configurations.Add(new CustomerMap());
...
}

您现在拥有共享的poco类和单个数据访问层。 有些人将他们的poco类视为他们的域对象(这没有问题),他们的业务逻辑在poco类中。只要您的poco对象本身保持持久无知,并且理想情况下您不希望在poco类中引用特定于实现的组件,这样就可以了。有关这方面的好文章,请参阅:

POCO - if POCO means pure .net class with only properties, where i can write validations in MVC

就个人而言,我首先喜欢db,然后使用EF电源工具对其进行反向工程,以获得代码优先模型,就好像您希望对其进行集成测试一样,您可以简单地为集成测试创建数据库并在完成后将其删除。