我设置了一个MVC 5应用程序,其中包含代码优先迁移。在我的本地机器上,我能够运行以下命令并更新数据库:
add-migration SomeMigration
update-database
我已使用文件系统选项通过VS部署我的应用程序,因为它已部署到本地服务器。部署成功发布 - 没有错误。
当我导航到网站时,我可以看到使用SQL Server Managment 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
}
}
}
如何应用种子数据?当我在本地计算机上更改模型并重新部署时,我得到database context has changed. Please consider using code first migration
错误?
答案 0 :(得分:2)
我可以从您的代码中看到您已决定使用DbMigration。无论何时运行迁移并更新数据库,它都将运行种子方法。
例如它将被调用:
每次执行Nuget中的Update-Database
命令时。
或者,它也可以从代码中调用:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, Configuration());
...
...
dbContext.Database.Initialize(true);
或使用DbMigrator:
DbMigrator migrator = new DbMigrator(new Configuration());
migrator.Update();
有一件事你必须知道,Seed方法将被称为X次,其中X是数据库迁移的排名/级别。
更多信息:https://blog.oneunicorn.com/2013/05/28/database-initializer-and-migrations-seed-methods/
!!您必须设置数据库初始化程序!!
答案 1 :(得分:0)
您当然可以将连接字符串更改为指向PROD并运行迁移,或者可以实现代码以在部署时运行迁移。在某些可接受的环境中,但我们的DBA永远不会允许这样做 - 它们需要我们提供的经过测试的脚本。我们已经为我们的流程执行了与this类似的操作。
播种肯定是一个问题,因为某些原因这不包括在脚本中。我们只是避免在迁移中添加任何种子,而是使用数据库初始化程序中的Seed()。这仅在创建数据库时运行,该数据库非常适合查找表。当我们需要在启动和运行后添加或更新数据时,我们在迁移的Up()方法中使用Sql()命令(这些命令可以编写脚本)。
关于错误&#34;数据库上下文已更改。请考虑使用代码首次迁移&#34; - 这与播种无关。这通常意味着您尚未将迁移应用于已部署的数据库。在本地更改模型时,需要通过脚本或其他方法进行迁移来更新已部署的数据库。