实体框架SQLite错误1:'无此表:__EFMigrationsHistory' -未创建数据库

pxiryf3j  于 2023-01-21  发布在  SQLite
关注(0)|答案(1)|浏览(209)

我正在尝试遵循this教程
最初dotnet ef迁移add initialmigration不起作用.(找不到命令)
我将VS2022更新为17.4.4,并运行dotnet tool install--global dotnet-ef,然后能够创建初始迁移。
我现在在运行dotnet ef数据库更新时遇到错误
我得到的错误是

  • PS D:\Soft\Source\ToDoApi\todoapi〉dotnet ef数据库更新构建开始...构建成功。信息:[20101]已执行数据库命令(9毫秒)[参数=[],命令类型="文本",命令超时="30"]从"sqlite_master"中选择计数(),其中"名称"="__EFMigrationsHistory" AND "类型"="表";信息:Microsoft. EntityFrameworkCore. Database. Command [20101]已执行数据库命令(1毫秒)[参数=[],命令类型="文本",命令超时="30"]创建表"__EFMigrationsHistory"("迁移ID"文本不为空约束"PK___EFMigrationsHistory"主键,"产品版本"文本不为空);信息:Microsoft. EntityFrameworkCore.数据库.命令[20101]已执行数据库命令(0毫秒)[参数=[],命令类型="文本",命令超时="30"]从"sqlite_master"中选择计数()WHERE "名称"="__EFMigrationsHistory" AND "类型"="table";信息:Microsoft. EntityFrameworkCore.迁移[20402]正在应用迁移"20230117171527_初始化迁移"。正在应用迁移"20230117171527_初始化迁移"。信息:[20101]已执行数据库命令(0毫秒)[参数=[],命令类型="文本",命令超时="30"]创建表"待办事项"("ID"整数不为空约束"PK_ToDos"主键自动增量,"待办事项名称"文本为空);失败:Microsoft. EntityFrameworkCore. Database. Command [20102]无法执行数据库命令(2毫秒)[参数=[],命令类型="文本",命令超时="30"]插入到"__EFMigrationsHistory"("迁移ID","产品版本")值("20230117171527初始迁移","7.0.2");* * 无法执行数据库命令(2毫秒)[参数=[],命令类型="文本",命令超时="30"]插入到"__EFMigrationsHistory"("迁移ID","产品版本")值("20230117171527_初始迁移","7.0.2");异常(0x80004005):SQLite错误1:'无此表:__EF迁移历史记录"。***

我在解决方案资源管理器中没有看到sqlite数据库文件或对它的引用,尽管它似乎已经从sqlite_master表中执行了选择计数()而没有失败。
似乎未创建数据库
我查看了This SO question,由于找不到数据库的路径,它也出现了同样的错误-不确定这是否也是我的问题-但如何解决它?
我已尝试删除迁移:
* dotnet ef迁移删除了并再次添加,但在运行dotnet ef数据库更新时仍然出现相同的错误
我尝试更新dotnet工具
dotnet ef update--global dotnet-ef**(已使用最新的稳定版本(版本"7.0.2")重新安装了工具"dotnet-ef"。)
我安装了这些nuget软件包:
a)微软实体框架核心设计7.0.2
b)微软实体框架核心Sqlite 7.0.2
有什么想法吗?

    • 编辑**

@art以下是应用设置. json

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    },
    "ConnectionStrings": {
      "SqliteConnection": "Data Source=Todo.db"
    }
  }
}

和程序. cs

using Microsoft.EntityFrameworkCore;
using ToDoAPI.Data;
using ToDoAPI.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<AppDbContext>(opt =>
    opt.UseSqlite(builder.Configuration.GetConnectionString("SqliteConnection")));

var app = builder.Build();

app.Run();

和应用程序数据库上下文

using Microsoft.EntityFrameworkCore;
using ToDoAPI.Models;

namespace ToDoAPI.Data
{
    public class AppDbContext : DbContext
    {
        public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
        {

        }

        public DbSet<ToDo> ToDos => Set<ToDo>();
    }
}
pgky5nke

pgky5nke1#

在appsettings.json层次结构中,“连接字符串”位于“日志记录”下

{
    "Logging": {
        ... ,
        "ConnectionStrings": { ... }
    }
}

这就是为什么程序找不到DB的路径
“连接字符串”应位于“日志记录”旁边

{
    "Logging": { ... },
    "ConnectionStrings": { ... }
}

相关问题