【问题标题】:How can I run SQL script in OnModelCreating by EF Core?如何在 EF Core 的 OnModelCreating 中运行 SQL 脚本?
【发布时间】:2022-08-21 16:01:54
【问题描述】:

我的程序有一个现有的 SQLite 数据库。

在新版本的程序中,它需要为一个特性添加一个列。

现在该程序由 .NET 6 (WPF) 和 EF Core 6 制作。

我必须检测新列是否存在并添加。

这是我在OnModelCreating 中的代码,用于检测该列是否存在:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);

    var Result = Database.ExecuteSqlRaw(\"SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=\'BindDesign\' AND COLUMN_NAME=\'type\'\");
}

代码运行后报这个错误:

在创建模型时尝试使用它。不能以任何使用正在创建的模型的方式在 \'OnModelCreating\' 内使用 DbContext 实例

我该如何解决这个问题?谢谢你。

  • 您应该使用标准迁移。
  • @AlexanderPetrov 感谢您回答我的问题。我读过一些关于迁移的文章。但是,迁移似乎每次都必须在命令行中输入一些代码,但在检测到列不存在时不会自动更新。
  • 如果您的解决方案需要频繁更新数据库结构,我宁愿考虑重新设计数据库概念。
  • @Michalor 不,它不会经常更改,仅针对此版本。
  • 看看这个问题:stackoverflow.com/questions/70633065/… 它有链接到其他可能有帮助的类似问题。

标签: c# entity-framework-core


【解决方案1】:

尝试为您的架构使用不同的上下文,错误消息很清楚,您可以使用正在创建的模型。 只需为您的架构创建另一个上下文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2013-12-06
    • 2019-12-03
    • 2012-02-14
    • 2013-06-09
    相关资源
    最近更新 更多