.net - Entity Framework SQLite 错误 1 ​​: 'no such table: __EFMigrationsHistory'

标签 .net sqlite entity-framework

我在 Windows 和 Linux 上运行 EF Core,并且在两者上都遇到相同的问题。

public string DbPath { get; }

string DbPath = $ "{Environment.GetFolderPath(Environment.SpecialFolder.Personal)}{Path.DirectorySeparatorChar}smart_contracts.db";

这会打印 Linux 和 Windows 10 上的路径。当我尝试运行 Add-MigrationUpdate-Database 时,出现 SQLite 错误

Error 1: 'no such table: __EFMigrationsHistory'. error.

代码:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlite($"Data Source={DbPath}");
}

如果我将其更改为Data Source=smart_contracts.db,它在两个平台上都能完美运行。

任何人都可以帮助我获取数据源字符串的路径吗?

最佳答案

在我看来,问题在于您想要在已经结构化且不是由 Entity Framework 生成的数据库上执行迁移。这可以解释缺少迁移表的原因。要使用此数据库,您应该 reverse engineer数据库结构。如果您不想更改数据库端或应用程序端的结构(因为,假设您自己实现了实体),您所需要做的就是在配置 DbContext 时指定数据库文件的本地化(正如您的帖子中所示)就是这样。

这里是一个 SQLite 数据库支架的示例:

Scaffold-DbContext "DataSource=file.sqlite3 "Microsoft.EntityFrameworkCore.Sqlite -OutputDir Models

编辑: 问题显然源于如何组合数据库文件的路径。更好的做法是使用 Path.Combine() 方法而不是字符串连接。

关于.net - Entity Framework SQLite 错误 1 ​​: 'no such table: __EFMigrationsHistory' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73508902/

相关文章:

.net - NHibernate 和 ADO.NET 连接池

c# - 列表框内的访问控件 c# (windows Phone 8)

python - 如何从字典创建 sqlite3 表

node.js - 错误 : no such function: json_each in SQLite with JSON1 installed

c# - IWebClient 将 Web 客户端接口(interface)作为依赖项注入(inject)

c# - Convert.ChangeType 快捷方式吗?

android - 在 SQLite 中选择日期大于或等于今天的位置

ASP.NET MVC - 根据上一篇文章对论坛主题进行排序

c# - 如何在 EF6 异步中启动实体存储过程而不等待返回?

c# - 代码首先在运行时添加属性