如何修复Entity Framework Core 7.0+SQLite代码优先模式下表不存在问题
解决EF Core 7.0 + SQLite代码优先数据库未自动创建的问题
1. 启用并应用迁移
SQLite代码优先不会自动生成表结构,必须通过迁移操作完成:
- 打开终端或Package Manager Console,执行初始迁移生成命令:
Add-Migration InitialCreate - 接着执行迁移应用命令,触发数据库和表的创建:
Update-Database
2. 显式调用数据库创建方法
如果不想用迁移,可在应用启动时强制创建数据库(仅适用于开发测试场景,与迁移不兼容):
// 在Program.cs的启动逻辑中添加 var app = builder.Build(); using (var scope = app.Services.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService<YourDbContext>(); // 不存在则创建数据库及表 dbContext.Database.EnsureCreated(); } app.Run();
3. 校验连接字符串
确保appsettings.json中的连接字符串配置正确:
"ConnectionStrings": { "DefaultConnection": "Data Source=YourDatabase.db;Cache=Shared" }
- 确认
Data Source指定的路径有读写权限,相对路径下的数据库文件会生成在项目输出目录(如bin/Debug/net7.0)。
4. 检查DbContext配置
确保DbContext正确注册SQLite驱动并包含对应实体的DbSet:
// DbContext类示例 public class YourDbContext : DbContext { public DbSet<YourEntity> YourEntities { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Data Source=YourDatabase.db"); } }
或在Program.cs中依赖注入时配置:
builder.Services.AddDbContext<YourDbContext>(options => options.UseSqlite(builder.Configuration.GetConnectionString("DefaultConnection")));
5. 用迁移方式初始化生产环境
生产环境建议使用迁移完成初始化,替换EnsureCreated()为:
dbContext.Database.Migrate();
该方法会自动应用所有未执行的迁移,保证表结构与实体模型一致。
内容的提问来源于stack exchange,提问作者Humaira Siddiqui
相关产品推荐
相关产品推荐

