实体框架和不同的环境(开发/生产)

Sea*_*ham 5 c# database sql-server asp.net-mvc entity-framework

我最近使用 ASP.NET MVC 进行了一个新项目,但我对这项技术并不十分熟悉。我仍处于早期阶段,即将开始自学如何使用实体框架来处理我的数据访问代码。我只是很难确定哪些软件/工具/功能可以做什么,但我认为我在 EF 上走在正确的轨道上。

我正在寻找能够看到我的本地数据库与我的生产数据库(架构,而不是其中的实际数据)中的差异的东西,并且能够将其发布到我们本地网络中的 SQL Server . 在我看来,我认为它就像数据库的 DVCS。

传统上(就像我所说的大多数)我会在我的代码或存储过程等中使用 SQL 编写我自己的数据访问代码,我会自己处理数据库方面的事情。不过,这对我来说不再是一种选择,因为我需要为开发和生产设置单独的环境,而且我真的没有时间也不想再手动编写所有这些代码。开发将位于开发机器的本地,生产将托管在我们本地网络的服务器上。

我最近开始使用 Visual Studio 中的“发布”功能,并且设法将其设置得非常好,将新版本发布到我的 IIS 服务器正在查看的目录中以提供站点。

我使用 Git 和 Sourcetree 来处理我的项目代码的 DVCS,但是我从来没有亲自使用或找到解决方案来为数据库做类似的事情。起初我以为我正在寻找某种适用于 SQL Server 的 DVCS,但并没有得到太多回报。本质上,我只想要某种工具来管理本地和生产数据库之间的版本差异,我认为这是 EF 可以为我做的事情。

对于数据库,我使用的是 SQL Server。我还没有为这个项目建立一个数据库,所以我认为代码优先的 EF 将是最好的方法。我想确保 EF 在 SQL Server 中使用数据库,我相信我可以通过指定要使用的连接字符串而不是 Visual Studio 中的连接字符串来设置。我偶尔需要通过 SSMS 进行数据库访问,因此我可以使用索引和备份计划,而我通常会通过 SSMS 进行这些操作,但我仍然希望 EF 为我完成大部分工作。

  1. 我可以按照我希望的方式使用 Entity Framework 实现我想要的目标吗?也就是说,有一个工具可以处理版本之间的数据库差异和更新?我不想弄清楚哪些表/列等。我已经在本地进行了更改,并且必须以某种方式将其处理到生产数据库中,但我也不希望生产数据库中的数据发生变化,只是结构体...
  2. 我希望任何人就如何构建此设置提供建议,或者甚至提供有关如何设置的教程的链接。我确信我不是第一个想要这样做的人,我知道我不会是最后一个。

本质上,我只想单击“发布”按钮,并将代码和数据库中的所有本地差异发布到生产服务器。

Fab*_*Luz 6

我可以按照我希望的方式使用实体框架实现我的预期目标吗?

这可以通过 EntityFramework 轻松完成。您正在寻找的内容称为“EF 迁移”。EF 迁移会扫描您的 POCO 类以查看它们是否与您的数据库匹配。如果有新的或更改的内容,它将为您更新数据库表。要了解如何使用 EF 迁移,请查看此链接https://msdn.microsoft.com/en-us/data/jj591621.aspx

连接字符串可以通过 Web.Config/App.Config 转换来解析。在发布过程中,Web.Config 转换会自动将开发连接字符串替换为生产连接字符串。要了解如何使用 web.config 转换,请查看此链接http://www.asp.net/mvc/overview/deployment/visual-studio-web-deployment/web-config-transformations

在发布过程中,您可以告诉 VisualStudio 检查哪些迁移尚未应用到生产数据库,并自动应用这些迁移。本文http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/migrations-and-deployment-with-the-entity-framework-in-an- asp-net-mvc-application展示了发布到 Windows Azure 时如何应用迁移。

希望能帮助到你!