我的公司有一个实习生网站项目。 我在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
数据库,而不会丢失任何数据。
感谢您的帮助,抱歉我的英语不好。
答案 0 :(得分:0)
您可以使用迁移,但您必须意识到迁移实际上做了什么 所以你有两个数据库开发和发布,其中开发数据库具有当前状态,发布数据库有一些状态可能比那个旧。
您在Dev-Database上创建迁移,然后在发布数据库上运行代码(我建议不要从Web站点执行此操作,因为它需要使用ddl-commands的权限)。例如,您可以通过运行控制台程序来检查和更新数据库。
那么如何通过一些简单的步骤来实现:
使用向上()和向下()函数在迁移过程中保留数据(EF会检测,如果您丢失数据并会发出警告)
要详细了解主题,请访问http://msdn.microsoft.com/en-us/data/jj591621.aspx