1

共享两个ASP.NET MVC 3个应用程序之间的数据库(我有一个很难加标题的问题,以便随时提出修改)在Azure上

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

最初,数据库是从MVC应用程序“A”代码优先创建的。来自所有创建的实体中的75%将与应用程序“B”相关,并且应用程序“B”将需要特定于它的少数实体。

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

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

因为在这方面工作的开发人员(我和其他开发人员)都是MVC和EF的新手,所以任何建议都将不胜感激。

回答

1

没有看到你有什么它没有完全映射在我的大脑 - 但我想我可能有这个想法。

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

另一种方法是首先把所有的代码放到一个单独的项目(whatever.domain,whatever.models)等等,那么你的映射代码进入你的数据访问项目

 
     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

个人而言,我喜欢分贝,然后再反向使用EF电动工具有一个代码,第一个模型,如果你曾经想要的集成测试,你可以简单地工程它为集成测试创建数据库并在完成后将其删除。

+0

感谢您对此采取行动吗?如果两个应用程序在不同的解决方案中,这种方法是否可行如果是,那么你认为“数据”项目应该在其中一个还是完全独立? – 2012-02-12 05:46:40

+0

绝对他们可以在不同的解决方案,因为一个项目可以属于多个解决方案。如果它成为问题,那么您可以简单地引用程序集并将项目保留在每个解决方案之外,但这里应该没有问题。数据项目可以存在于两者中,如果你想要的话,或者是自己的。那是你的电话。另外我还做了一些小修改 – 2012-02-12 06:08:28

+0

这很有帮助,谢谢! – 2012-02-16 12:18:32