Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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
C# EF代码首次迁移在部署到生产环境时不播种数据_C#_Asp.net Mvc_Entity Framework_Entity Framework Migrations - Fatal编程技术网

C# EF代码首次迁移在部署到生产环境时不播种数据

C# EF代码首次迁移在部署到生产环境时不播种数据,c#,asp.net-mvc,entity-framework,entity-framework-migrations,C#,Asp.net Mvc,Entity Framework,Entity Framework Migrations,我有一个MVC5应用程序,使用代码优先迁移进行设置。在我的本地计算机上,我可以运行以下命令并更新数据库: add-migration SomeMigration update-database 我已经通过VS部署了我的应用程序,使用文件系统选项将其部署到本地服务器。部署已成功发布-无错误 当我导航到该站点时,我可以看到表是使用SQL Server Management Studio创建的,但没有应用种子数据?下面是我的种子课 namespace MyApp.Migrations {

我有一个MVC5应用程序,使用代码优先迁移进行设置。在我的本地计算机上,我可以运行以下命令并更新数据库:

add-migration SomeMigration
update-database
我已经通过VS部署了我的应用程序,使用文件系统选项将其部署到本地服务器。部署已成功发布-无错误

当我导航到该站点时,我可以看到表是使用SQL Server Management Studio创建的,但没有应用种子数据?下面是我的种子课

  namespace MyApp.Migrations
  {

     internal sealed class Configuration :   
     DbMigrationsConfiguration<ApplicationDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
            MigrationsDirectory = @"Persistence\Migrations";
        }

        protected override void Seed(ApplicationDbContext context)
        {
            // Seed stuff

        }

    }
}
名称空间MyApp.Migrations
{
内部密封类配置:
DBMigrations配置
{
公共配置()
{
AutomaticMiggerationsEnabled=假;
MigrationsDirectory=@“持久性\迁移”;
}
受保护的重写无效种子(ApplicationDbContext上下文)
{
//种子料
}
}
}

我如何获得它应用种子数据,当我在本地机器上更改模型并重新部署时,我得到
数据库上下文已更改。请考虑使用代码第一次迁移错误> 

,我可以从代码中看到您已经决定进行DbDigices。无论何时运行迁移和更新数据库,它都将运行seed方法

例如,它将被称为: 每次执行Nuget中的
updatedatabase
命令时

或者,也可以从如下代码调用:

  Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration());
  ...
  ...
  dbContext.Database.Initialize(true);
您必须知道,Seed方法将被称为X-times,其中X是数据库迁移的排名/级别

更多信息:


!!您必须设置数据库初始值设定项

您当然可以将连接字符串更改为指向PROD并运行迁移,也可以实现代码以在部署时运行迁移。在某些环境中,这可能是可以接受的,但我们的DBA绝不允许这样做——他们需要我们提供的经过测试的脚本。我们在流程中遵循了类似的方法

种子设定绝对是一个问题,因为出于某种原因,它没有包含在脚本中。我们只是避免在迁移中添加任何种子,而是在数据库初始值设定项中使用Seed()。这将仅在创建数据库时运行,该数据库非常适合查找表。当我们需要在数据启动和运行后添加或更新数据时,我们在迁移的up()方法中使用Sql()命令(这些命令会编写脚本)


关于错误“数据库上下文已经改变。请考虑使用代码第一迁移”-这与播种无关。这通常意味着您尚未将迁移应用于已部署的数据库。当您在本地更改模型时,您需要通过脚本或其他方法使用迁移更新已部署的数据库。

这是一个实用且可能不是最佳做法的解决方案,但我会将web配置中的连接更改为指向实时数据库并运行迁移。一旦应用程序部署到生产环境中,我如何发出更新数据库命令?当使用本地版本时,更新数据库仅在VS中工作?如果microsoft asp mvc网站上的
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
?我在哪里定义此代码
Database.SetInitializer(新的migratedatabasetolatestversion)我找到了本教程,它可以更好地解释它,以帮助其他人。我在DbContext的构造函数中使用了第一个。工作正常。
 DbMigrator migrator = new DbMigrator(new Configuration());
 migrator.Update();