MVC5 EF6 Code First首先使用两个数据库进行调试和发布

时间:2014-01-27 10:00:40

标签: c# asp.net-mvc entity-framework asp.net-mvc-5 entity-framework-6

我的公司有一个实习生网站项目。 我在Code First项目中使用MVC5和Entity Framework 6。

这是我公司的内联网,所以我想要两个数据库。 1在生产(发布)。 1在dev(调试)中。

我编辑了Web.config,Web.Debug.config和Web.Release.config这样的文件:

的Web.Config

<connectionStrings>
    <add name="Connexion" connectionString="Data Source=[MYSQLSERVER];Initial Catalog=Intranet;Persist Security Info=True;User ID=[MYUSER];Password=[MYPASS]" providerName="System.Data.SqlClient"/>
</connectionStrings>

Web.Debug.Config

<connectionStrings>
    <add name="Connexion" connectionString="Data Source=[MYSQLSERVER];Initial Catalog=Intranet;Persist Security Info=True;User ID=[MYUSER];Password=[MYPASS]" providerName="System.Data.SqlClient"
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>

Web.Release.config

<connectionStrings>
    <add name="Connexion" connectionString="Data Source=[MYSQLSERVER];Initial Catalog=IntranetRelease;Persist Security Info=True;User ID=[MYUSER];Password=[MYPASS]" providerName="System.Data.SqlClient"
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>

当我在发布模式中使用Web Deploy部署我的项目时,所有工作都已完成,最终的Web.Config对目录具有良好的值IntranetRelease

我的问题是我的网站无法正常工作,因为数据库IntranetRelease未从Intranet数据库更新。

我制作了Intranet的完美副本并手动创建IntranetRelease。它工作但当人们使用网站时我不能这样做,因为所有数据都将在IntranetRelease数据库上。

我已尝试在我的项目中在发布模式下执行Add-Migration xxx,但它不会改变任何内容。

目标是:

当发布内部网工作时,我在dev数据库上工作。当我的所有更改都适合发布时,我想部署一个带有Web Deploy和do something的新版本,用我的更改更新IntranetRelease数据库,而不会丢失任何数据。

感谢您的帮助,抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

您可以使用迁移,但您必须意识到迁移实际上做了什么 所以你有两个数据库开发和发布,其中开发数据库具有当前状态,发布数据库有一些状态可能比那个旧。

您在Dev-Database上创建迁移,然后在发布数据库上运行代码(我建议不要从Web站点执行此操作,因为它需要使用ddl-commands的权限)。例如,您可以通过运行控制台程序来检查和更新数据库。

那么如何通过一些简单的步骤来实现:

  1. 在Config-File中创建一个ConnectionString(这将是Developer-Database)
  2. 在Release.Config文件中创建一个ConncetionString(如果App.Config这将是生产数据库,请使用SlowCheeta)
  3. 在Dev。中创建DatabaseModel。
  4. 使用Add-Migration“SomeNameGoesHere”构建从当前数据库到模型定义数据库的迁移。
  5. 构建Release时,EF会注意您将Release-Database迁移到所需的(例如模型定义的状态)。请勿使用更新数据库进行生产数据库。
  6. 使用向上()和向下()函数在迁移过程中保留数据(EF会检测,如果您丢失数据并会发出警告)

    要详细了解主题,请访问http://msdn.microsoft.com/en-us/data/jj591621.aspx