簡體   English   中英

在 .NET 4.7.2 class 庫中使用 EF Core 3.1 SQLite 數據庫

[英]Using EF Core 3.1 SQLite database in .NET 4.7.2 class library

我在 .NET 4.7.2 項目中包含了 package Microsoft.EntityFrameworkCore.Sqlite (最新的 3.1.x 版本)。 這是我的DbContextOnConfiguring方法:

protected override void OnConfiguring(DbContextOptionsBuilder options)
{
    options.UseSqlite($@"Data Source=D:\MyDb.db");
}

我從另一個 .NET 4.7.2 項目中引用了 class 庫。

每當我嘗試讀取、寫入或創建數據庫(如dbContext.Database.EnsureCreated(); )時,我會在TypeInitializationException構造函數上獲得以下SqliteConnection以及以下 InnerException:

消息: The path has an invalid format

堆棧跟蹤:

at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
   at System.IO.Path.InternalGetDirectoryName(String path)
   at SQLitePCL.NativeLibrary.MakePossibilitiesFor(String basename, Assembly assy, Int32 flags, LibSuffix suffix)
   at SQLitePCL.NativeLibrary.MyLoad(String basename, Assembly assy, Int32 flags, Action`1 log)
   at SQLitePCL.NativeLibrary.Load(String libraryName, Assembly assy, Int32 flags)
   at SQLitePCL.Batteries_V2.MakeDynamic(String name, Int32 flags)
   at SQLitePCL.Batteries_V2.DoDynamic_cdecl(String name, Int32 flags)
   at SQLitePCL.Batteries_V2.Init()

我猜路徑與我的 ConnectionString 有關,但我看不出它有什么問題。

出於測試目的,我創建了一個 .NET 5 項目並從那里引用了 4.7.2 class 庫。 如果我調用dbContext.Database.EnsureCreated(); 在這個項目中,它按預期工作並創建了數據庫。

所以我想這是關於 .NET 4.7.2 和 EF Core 混合的問題。 但根據Microsoft Docs EF Core 3.1 應該可以與 .NET 4.7.2 一起正常工作

也許與 EF Core 的 SQLite 適配器有關?

TypeInitializationException誤導了我。 最后,我在 .NET 4.7.2 項目中使用的Costura.Fody package 將所有 DLL 捆綁到一個 *.exe 文件中存在問題。

似乎這不適用於 SQLite 庫。 無論出於何種原因,沒有包含SQLitePCLRaw.*.dll文件,這導致了所描述的TypeInitializationException 通常,如果不包括 DLL,則會收到FileNotFoundException

在類似的問題上看到這個答案,不幸的是我只是在我在這里發布我的問題后才發現的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM