(我很难给问题命名,所以请随意提出修改建议)
情况是这样的:我们刚刚开始构建一个系统,该系统由两个在 Azure 上运行的集成 MVC 3 Web 应用程序组成,并具有共享的 AzureSQL 数据库。运行两个应用程序而不是一个应用程序的原因有很多,我不想讨论这个问题......
最初,数据库是从 MVC 应用程序“A”代码优先创建的。所有创建的实体中的 75% 将与应用程序“B”相关,加上应用程序“B”将需要一些特定于它的实体。
目前,实体定义类已被提取到应用程序“A”解决方案中的类库中,以便在应用程序“B”中重用。但我仍然不确定如何添加应用程序“B”所需的实体...
问题是:在这种情况下管理数据库开发/管理的最佳方法是什么?具体来说,实体的定义应该在哪里?我们是否应该有一个单独的数据库项目来定义数据库并以数据库优先的方式工作? (此选项是我现阶段的首选)。
由于从事此工作的两位开发人员(我和其他开发人员)都是 MVC 和 EF 新手,因此我们将不胜感激。
最佳答案
在没有看到你所拥有的内容的情况下,它并不完全映射在我的大脑中 - 但我想我可能对此有一个想法。
您能否创建一个包含模型(数据访问层)的附加项目,其中安装了 Entity Framework 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
我个人喜欢首先使用数据库,然后使用 EF 强大工具对其进行逆向工程,以获得代码优先模型,就好像您想要集成测试它一样,您可以简单地为集成测试创建数据库并在完成后将其删除。
关于asp.net-mvc-3 - 在 Azure 上的两个 ASP.NET MVC 3 应用程序之间共享数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9246655/