Wie schließe ich eine mit System.Data.SQLite und DbContext geöffnete SQLite-Datei?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie schließe ich eine mit System.Data.SQLite und DbContext geöffnete SQLite-Datei?

Post by Guest »

Bei meiner EF6-Nachbildung dieser exemplarischen Vorgehensweise zum Erstellen und Zugreifen auf eine SQLite-Datenbank mithilfe von System.Data.SQLite habe ich festgestellt, dass bei jedem Zugriff auf die Datenbank das Dateihandle für die Datenbankdatei offen bleibt, lange nachdem ich das einzige entsorgt habe Einwegobjekt, das ich erstellt habe: der DbContext.

Dies verhindert, dass ich die Datenbankdatei lösche, wenn ich damit fertig bin (z. B. am Ende eines Komponententests oder wenn der Benutzer meiner App fragt danach).

Sie können sehen, wie einfach meine Verwendung von DbContext ist und wie File.Delete nach dem Schließen fehlschlägt:

Code: Select all

using (var context = new ChinookContext())
{
var artists = from a in context.Artists
where a.Name.StartsWith("A")
orderby a.Name
select a;

foreach (var artist in artists)
{
Console.WriteLine(artist.Name);
}
}

// I've disposed of the DbContext. All handles to the sqlite database file SHOULD
// have been released by now.
// Yet, this next line fails because the file is still locked.
File.Delete("Chinook_Sqlite_AutoIncrementPKs.sqlite");
(vollständiger Projektkontext auf Github)

Irgendwelche Ideen, was mir fehlt, um das zu schließen Dateihandle?

Übrigens bin ich mir der FAQ Nr. 22 zu Dateisperren bewusst, die nur aufgehoben werden, wenn ich Befehle, Datenleser usw. entferne, aber ich habe Da ich keines davon selbst geöffnet habe, weiß ich nicht, wie ich es entsorgen kann sie.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post