我在 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
and Update-Database
我收到 SQLite 错误
错误 1:“没有这样的表:__EFMigrationsHistory”。错误。
Code:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite($"Data Source={DbPath}");
}
如果我把它改成Data Source=smart_contracts.db
,它在两个平台上都能完美运行。
谁能帮我获取数据源字符串的路径?
在我看来,问题在于您想要在已经结构化且不是由实体框架生成的数据库上执行迁移。这可以解释缺少迁移表的原因。要使用这个数据库你应该反向工程 https://learn.microsoft.com/en-us/ef/core/managing-schemas/scaffolding/?tabs=dotnet-core-cli数据库结构。如果您不想更改数据库端或应用程序端的结构(因为,假设您自己实现了实体),您所需要做的就是在配置 DbContext 时指定数据库文件的本地化(正如您的帖子中所示)就是这样。
下面是一个 SQLite 数据库支架的示例:
Scaffold-DbContext "DataSource=file.sqlite3 "Microsoft.EntityFrameworkCore.Sqlite -OutputDir Models
Edit:问题显然源于如何组合数据库文件的路径。更好的做法是使用Path.Combine()
方法而不是字符串连接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)