我有一組使用 SQLite 和 Entity Framework Core 的單元測驗。這是第一個版本,為了發布這個問題,我已將其簡化為要點。using出于應該清楚的原因,代碼分為兩個塊。
/* Clear the files before starting. */
File.Delete("testdata.db");
File.Delete("copydata.db");
/* Create a fixed set of records suitable for unit testing. */
using (var db = new TestDataContext("testdata.db"))
{
/* Create all the tables needed. */
db.Database.EnsureCreated();
/* Add several hundred fixed records that all unit tests use. */
db.Add(new Person{Name="Bill", Vegetable="Rutabaga"});
/* Save them all. */
db.SaveChanges();
} /* Close connection. */
/* Open the file again. */
using (var db = new TestDataContext("testdata.db"))
{
/* Read the first record of the many in the database. */
Console.WriteLine(db.Persons.First().Name);
}
這行得通,但有一個問題。有幾個(數百個)單元測驗,每個測驗呼叫相同的代碼來設定具有幾個(數百個)固定記錄的資料庫。這種努力需要很多時間。我想將包含初始記錄集的資料庫檔案隱藏起來,并為每個單元測驗制作副本。
因此,讓我們在兩個塊之間添加一條線,并在第二個建構式呼叫中更改檔案名。
File.Copy("testdata.db", "copydata.db");
using (var db = new TestDataContext("copydata.db"))
似乎盡管呼叫SaveChanges并關閉了該using塊,但磁盤上的檔案沒有更新。當代碼嘗試讀取第一條記錄并顯示第一個Name值時,它會引發例外,抱怨表丟失。
如何提交通過 Entity Framework Core 所做的所有更改,以便我可以復制包含所有更改的檔案。
(注意:我沒有包含代碼,TestDataContext因為它是一個完全普通的 Entity Framework Core 自定義背景關系,在呼叫UseSqlite中OnConfiguring呼叫,傳入"Data Source="后跟提供給建構式呼叫的檔案名。如果你真的需要它來回答問題,請發表評論。)
uj5u.com熱心網友回復:
將 Pooling=false 添加到您的連接字串并使用檔案的完整路徑以避免混淆
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/510177.html
