You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 11:42:39