Pat*_*ick 4 .net sqlite entity-framework
我在 Windows 和 Linux 上运行 EF Core,并且在两者上都遇到相同的问题。
public string DbPath { get; }
string DbPath = $ "{Environment.GetFolderPath(Environment.SpecialFolder.Personal)}{Path.DirectorySeparatorChar}smart_contracts.db";
Run Code Online (Sandbox Code Playgroud)
这会打印 Linux 和 Windows 10 上的路径。当我尝试运行时,Add-Migration出现Update-DatabaseSQLite 错误
错误 1:“没有这样的表:__EFMigrationsHistory”。错误。
代码:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite($"Data Source={DbPath}");
}
Run Code Online (Sandbox Code Playgroud)
如果我将其更改为Data Source=smart_contracts.db,它在两个平台上都能完美运行。
谁能帮我获取数据源字符串的路径?
在我看来,问题在于您想要在已经结构化且不是由实体框架生成的数据库上执行迁移。这可以解释缺少迁移表的原因。要使用此数据库,您应该对数据库结构进行逆向工程。如果您不想更改数据库端或应用程序端的结构(因为,假设您自己实现了实体),您所需要做的就是在配置 DbContext 时指定数据库文件的本地化(正如您的帖子中所示)就是这样。
下面是一个 SQLite 数据库支架的示例:
Scaffold-DbContext "DataSource=file.sqlite3 "Microsoft.EntityFrameworkCore.Sqlite -OutputDir Models
Run Code Online (Sandbox Code Playgroud)
编辑:
问题显然源于如何组合数据库文件的路径。更好的做法是使用该Path.Combine()方法而不是字符串连接。
| 归档时间: |
|
| 查看次数: |
7930 次 |
| 最近记录: |