我安装了一个MVC 5应用程序,其中包含了代码优先迁移。在我的本地机器上,我能够运行以下命令并更新数据库:
add-migration SomeMigration
update-database我已经通过VS部署了我的应用程序,使用文件系统选项将其部署到本地服务器。部署成功发布-没有错误。
当我导航到站点时,我可以看到表是使用创建的,但是没有应用种子数据?下面是我的种子课?
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错误。
发布于 2016-08-09 13:06:33
从您的代码中可以看出,您已决定使用DbMigration。无论何时运行迁移和更新数据库,它都将运行seed方法。
例如,它将被调用:每次执行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/
必须设置数据库初始化程序。
发布于 2016-08-09 13:24:08
当然,您可以将连接字符串更改为指向PROD并运行迁移,也可以实现代码以在部署时运行迁移。在某些环境中,这可能是可以接受的,但我们的DBA绝不会允许这样做--它们需要我们提供的测试脚本。在我们的过程中,我们遵循了类似于这的内容。
种子肯定是一个问题,因为由于某些原因,这不包括在脚本中。我们只是避免在迁移中添加任何种子,而是在数据库初始化器中使用Seed()。这将只在创建数据库时运行,这对于查找表来说是完美的。当我们需要在数据启动和运行后添加或更新数据时,我们在迁移的Up()方法中使用Sql()命令(这些命令都是脚本化的)。
关于错误,“数据库上下文发生了变化。请考虑使用代码优先迁移”--这与种子无关。这通常意味着您还没有将迁移应用到已部署的数据库。当您在本地更改模型时,需要通过脚本或其他方法使用迁移更新已部署的数据库。
https://stackoverflow.com/questions/38850085
复制相似问题