如何在部署后更新asp mvc网站中的数据库模式(模型),而不会丢失任何先前的数据?
我刚刚将一个MVC5网站部署到azure网站。一切都很好,因此我开始上传一些数据。然后我想出了我需要更新的东西。这很简单,我只想对其数据库架构稍作修改。
在本地机器(开发阶段),我们可以运行
Update-Database
包管理器控制台上的。这是问题吗?如何对发布的版本做同样的想法?我没有尝试重新发布我的解决方案,担心数据会丢失(数据很多,重新上传太多)。
我首先使用实体框架6代码并启用迁移:
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
我想要做的只是在数据行之一添加一个属性:
public class MyViewModel
{
public string Name {get;set; }
public string Content { get; set; }
}
为:
public class MyViewModel
{
public string Name {get;set; }
[AllowHtml] //ADDING THIS ONLY
public string Content { get; set; }
}
感谢。
答案 0 :(得分:3)
除其他解决方案外,您可以使用此
Database.SetInitializer(new MigrateDatabaseToLatestVersion<BlogContext, Configuration>());
其中BlogContext
是您的上下文,Configuration
是由代码首先生成的配置类(从DbMigrationsConfiguration<T>
下降的一个)。
当然,您必须重新发布您的申请(至少是二部分)。
另请阅读http://msdn.microsoft.com/en-us/data/jj591621.aspx,特别是最后几段。
答案 1 :(得分:0)
欢迎来到生产环境中Code First Migrations的可怕之处!需要注意的一点是,如果启用自动迁移,则永远不能还原迁移。相反,建议您不要进行自动迁移。而是从您的控制台运行add-migration "migrationName"
。这将使用up和down方法向迁移文件夹添加迁移,您可以在其中查看与该迁移相关的所有更改。您可以通过运行update-database -script来查看将对数据库运行的SQL。实际上不会运行更改,但您可以看到生成的sql。 Here是Code First迁移和部署以及web.config文件中所需的所有更改的一个很好的演练。
我相信在您使用自动迁移时,默认情况下会禁用数据丢失。