我在 Windows 和 Linux 上运行 EF Core,并且在两者上都遇到相同的问题。
public string DbPath { get; }
string DbPath = $ "{Environment.GetFolderPath(Environment.SpecialFolder.Personal)}{Path.DirectorySeparatorChar}smart_contracts.db";
这会打印 Linux 和 Windows 10 上的路径。当我尝试运行 Add-Migration
和 Update-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/