C# EF代码首次迁移在部署到生产环境时不播种数据
我有一个MVC5应用程序,使用代码优先迁移进行设置。在我的本地计算机上,我可以运行以下命令并更新数据库: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 {
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
您必须知道,Seed方法将被称为X-times,其中X是数据库迁移的排名/级别 更多信息:Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration()); ... ... dbContext.Database.Initialize(true);
!!您必须设置数据库初始值设定项 您当然可以将连接字符串更改为指向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();