gpt4 book ai didi

asp.net-mvc - MigrateDatabaseToLatestVersion 未执行

转载 作者:行者123 更新时间:2023-12-02 22:45:05 25 4
gpt4 key购买 nike

我不明白为什么我的最新迁移没有在应用程序启动时(或至少在第一次访问数据库上下文时)自动执行。我曾经在开发中手动运行update-database,但我想测试它是否会在我的托管测试环境中自动升级。

在Application_Start()中:

Database.SetInitializer<FepazoContext>(
new MigrateDatabaseToLatestVersion<FepazoContext, FepazoConfiguration>())

在 Fepazo 配置中:

internal sealed class FepazoConfiguration : 
DbMigrationsConfiguration<Fepazo.Models.FepazoContext>
{
public FepazoConfiguration()
{
AutomaticMigrationsEnabled = true;
}
}

我什至将其添加到 FepazoContext 的构造函数中:

public FepazoContext() : base("DefaultConnection")
{
Database.Initialize(false);
}

一些额外信息:

  • 迁移是通过add-migration自动创建的,看起来没问题。
  • 当我查询 __MigrationHistory 表时,我可以看到迁移尚未在执行时“记录”。
  • 我已验证 Web.config 文件中的初始化程序或 AutomaticMigrationsEnabled 设置未被覆盖。
  • FepazoContext 构造函数和 FepazoConfiguration 中的断点被命中

我是不是忘记了什么?我可以深入挖掘以找出问题所在吗?

更新

True 传递给 Database.Initialize 来尝试强制迁移也没有效果。 Database.CompatibleWithModel(true) 返回 false - 因此系统检测到存在差异,但它不会执行挂起的迁移!

public FepazoContext() : base("DefaultConnection")
{
if (!Database.CompatibleWithModel(true))
{
// This is executed (each time the code enters)
Database.Initialize(true);
}
}

解决方法

作为解决方法,我在设置初始值设定项后立即显式调用 DbMigrator.Update()。这确实有效,尽管我仍然想知道为什么它不能自动工作......

protected void Application_Start()
{
// <...>
Database.SetInitializer<FepazoContext>(
new MigrateDatabaseToLatestVersion<FepazoContext, FepazoConfiguration>());
var dbMigrator = new DbMigrator(new FepazoConfiguration());
dbMigrator.Update();
// <...>
}

最佳答案

根据another answer on here在与数据库进行一些交互之前,初始化程序不会运行。答案解释了如何强制初始化程序立即运行。

关于asp.net-mvc - MigrateDatabaseToLatestVersion 未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18550011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com