.NET Core执行dotnet ef database update报错:no such table: __EFMigrationsHistory
解决SQLite Error 1: 'no such table: __EFMigrationsHistory'问题
以下是几种可行的解决步骤,按顺序尝试:
步骤1:确认迁移已正确生成
如果你还没创建过迁移,先在终端执行:
dotnet ef migrations add InitialCreate
如果已经有迁移文件,检查Migrations目录下的迁移类Up方法,确认包含创建__EFMigrationsHistory表的逻辑(SQLite的EF Core迁移通常会自动生成这段代码)。
步骤2:手动创建__EFMigrationsHistory表
如果自动创建表失败,你可以手动用SQLite工具创建该表:
- 用sqlite3命令行或DB Browser for SQLite打开
skinet.db文件 - 执行以下SQL语句:
CREATE TABLE "__EFMigrationsHistory" ( "MigrationId" TEXT NOT NULL CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY, "ProductVersion" TEXT NOT NULL );
- 再次执行
dotnet ef database update
步骤3:检查连接字符串路径
确认appsettings.development.json里的连接字符串指向正确的数据库文件位置:
- 如果数据库文件在项目根目录,用
Data Source=skinet.db或Data Source=./skinet.db - 如果是子目录,比如
Data/skinet.db,要写Data Source=Data/skinet.db
避免因找不到数据库文件导致表创建失败。
步骤4:重置迁移和数据库
如果以上方法都无效,直接重置:
- 删除项目中的Migrations文件夹
- 删除项目根目录下的
skinet.db文件 - 重新生成迁移:
dotnet ef migrations add InitialCreate - 执行数据库更新:
dotnet ef database update
小优化:给StoreContext构造函数添加类型约束
把StoreContext的构造函数改成带泛型的选项参数,更类型安全,避免潜在配置问题:
public StoreContext(DbContextOptions<StoreContext> options) : base(options) { }
内容的提问来源于stack exchange,提问作者A. F. M. Golam Kibria
相关产品推荐
相关产品推荐

