Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC 4,迁移-如何运行&x27;更新数据库';在生产服务器上_Asp.net Mvc_Entity Framework_Asp.net Mvc 4_Entity Framework 5_Entity Framework Migrations - Fatal编程技术网

Asp.net mvc ASP.NET MVC 4,迁移-如何运行&x27;更新数据库';在生产服务器上

Asp.net mvc ASP.NET MVC 4,迁移-如何运行&x27;更新数据库';在生产服务器上,asp.net-mvc,entity-framework,asp.net-mvc-4,entity-framework-5,entity-framework-migrations,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Entity Framework 5,Entity Framework Migrations,我可以使用包管理器在本地运行“更新数据库-详细” 可能是个愚蠢的问题,但我在网上找不到它-一旦我的网站被部署-我如何在服务器上手动运行它 第二,对于将数据库迁移部署到生产环境,您还建议采用哪些其他策略?这些策略如何更可取 感谢我们,DBA是唯一能够访问生产(和预生产)环境的组。我们只需使用updatedatabase-Scriptpackage控制台命令来获取更新数据库所需的Sql。这会交给他们,让他们验证,等等 也许对某些人来说有点过于简单化,但它是有效的 HTH.我个人喜欢设置自动迁移,每次

我可以使用包管理器在本地运行“更新数据库-详细”

可能是个愚蠢的问题,但我在网上找不到它-一旦我的网站被部署-我如何在服务器上手动运行它

第二,对于将数据库迁移部署到生产环境,您还建议采用哪些其他策略?这些策略如何更可取


感谢我们,DBA是唯一能够访问生产(和预生产)环境的组。我们只需使用
updatedatabase-Script
package控制台命令来获取更新数据库所需的Sql。这会交给他们,让他们验证,等等

也许对某些人来说有点过于简单化,但它是有效的


HTH.

我个人喜欢设置自动迁移,每次调用应用程序的start方法时都会运行。这样,在进行每次部署时,迁移只需运行并自动更新应用程序

从AppHarbor查看这篇文章


要点是,您基本上希望启用自动迁移,然后从代码中调用数据库初始值设定项,无论是从OnModelCreating方法还是从Global.asax。您有两个选项:

  • 您可以使用
    updatedatabase-script
    生成SQL命令来更新服务器上的数据库
  • 您可以使用位于
    /packages/EntityFramework5.0.0/tools/migrate.exe
    上的包文件夹中的可执行文件。我曾经在Jet Brains的Team City Build Server上成功地使用它,用我的部署脚本设置迁移
  • 如果您使用的是IIS Web Deploy,则可以告诉服务器在发布后执行迁移(请参见下面的pic)
  • 您可以设置自动迁移,但我更喜欢控制发生的时间:)
更新:另外,请注意,他在Microsoft的MsBuild团队工作,对部署有一些很好的见解


您可以使用EF命令(更新数据库-脚本)获取脚本,也可以手动编写脚本。这并不是在生产环境中更新数据库最重要的事情。对我来说,最重要的是确保所有脚本都正确运行,并且它们按预期影响了记录。 在我看来,您应该有一个预生产环境,数据库应该是生产环境的副本。这样,您就可以在一个非常相似的环境中运行脚本和部署应用程序,并查看是否存在任何问题。有时脚本在开发环境中正确执行,但在生产环境中失败。为了避免头痛,您应该在预生产环境中模拟生产环境。 关于脚本,如果团队有多个开发人员,我更喜欢将脚本分类为结构脚本和数据脚本。结构脚本改变数据库的结构(添加表、向表中添加列等),数据脚本插入/更新/删除记录。此外,每个脚本都应该指定其依赖项,以便它们不能以错误的顺序执行。在创建表A之前,无法执行在表A中插入行的数据脚本。我就是这么做的: -定义用于注册已执行脚本的表。例如:ExecutedScripthStory。 -每个脚本都有一个编号和名称。 -执行脚本后,将在表ExecutedScriptsStory中插入新行。 -在执行脚本之前,它会检查其依赖项。为此,它检查脚本是否已执行(存在于表ExecutedScriptsHistory中)


运行脚本后,可以检查是否已执行所有脚本检查ExecuteScripthStory。此策略类似于Microsoft在EF迁移中选择的策略,但您可以完全控制它。

我知道这个问题已经得到了回答,但供将来参考:

其中一个选项是在DB上下文类的构造函数中放置类似的内容:

public MyDbContext()
    {
        System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>());            
    }
public MyDbContext()
{
System.Data.Entity.Database.SetInitializer(新的MigrateDatabaseToLatestVersion());
}

给大家一个简单的答案

这是“更新数据库” 在迁移文件夹Configuration.cs中:

    internal sealed class Configuration : DbMigrationsConfiguration<projectname.Models.dbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true; // Update-Data -Force (deletes columns etc)
    }
内部密封类配置:dbmigtorinsconfiguration
{
公共配置()
{
AutomaticMiggerationsEnabled=真;
AutomaticMiggerationDataLossAllowed=true;//更新数据-强制(删除列等)
}
要首先在远程服务器上“启用迁移”,请将其添加到Global.asax.cs文件中:

        protected void Application_Start()
    {
        ....
        System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<dbContext, Migrations.Configuration>());
受保护的无效应用程序\u Start()
{
....
System.Data.Entity.Database.SetInitializer(新的MigrateDatabaseToLatestVersion());

一个简单的解决方案:从本地Package Manager控制台运行
Update Database
,为生产连接字符串提供连接字符串参数。您还必须提供连接提供程序名称(本示例代码中为SqlServer):

您必须具有从本地计算机访问该服务器的权限。例如,如果您能够从Sql server Management Studio连接到该服务器,则可以使用此选项


请注意,对于真正的生产系统不建议使用这种方法,您应该使用类似于公认答案中所述的方法。但它可以帮助您在开发远程服务器、测试环境等方面进行快速黑客攻击。

这不包括手动执行“更新数据库”-就像我在VS.ie中所做的那样-没有软件包管理服务器上的er控制台-那么您只使用power shell或命令行中的命令吗?如果是,我在任何地方都找不到它。我想知道如何手动运行它-而不是r
Update-Database -ConnectionString <your real remote server connection string here> -ConnectionProviderName System.Data.SqlClient
Update-Database -ConnectionStringName <your connection string name here>