[英]How can EF Core prevent seeding from being invoked multiple times in OnModelCreating()?
[英]How can I run SQL script in OnModelCreating by EF Core?
我的程序有一个现有的 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'");
}
代码运行后报这个错误:
在创建 model 时尝试使用它。 不能以任何利用正在创建的 model 的方式在“OnModelCreating”内部使用 DbContext 实例
我该如何解决这个问题? 谢谢你。
您应该使用迁移在数据库中添加列。 如果您想在启动时应用迁移,您可以检查是否需要迁移数据库并使用类似这样的方式应用迁移
if (_context.Database.GetPendingMigrations().Any()) {
await _context.Database.MigrateAsync();
}
尝试为您的架构使用不同的上下文,错误消息很清楚,您可以使用正在创建的 model。 只需为您的架构创建另一个上下文。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.