SQLite, EntityFramework und Cascade Delete

SQLite bzw. eine SQLite Datenbank unterstützt, um die referentielle Integrität sicherzustellen, eine das Konstrukt einer Löschweitergabe (“ON DELETE CASCADE” beim erstellen eines Fremdschlüssels).

Während diese Löschweitergabe mit einem Tool z.B. SQLite Studio wie erwartet funktioniert, passiert beim Einsatz des Entity Frameworks nichts.

Die Ursache dieses Verhaltens ist, dass SQLite aus Kompatibilitätsgründen die Foreign Key Constraints ignoriert. Mehr dazu hier.

Man kann, im Falle von ADO.NET bzw. Entity Framework, die Foreign Key Constraints über den Connection String einschalten. Das kann mit dem Flag “foreign keys=true” gemacht werden.

Hier ein Beispiel, eines ConnectionStrings, ohne das entsprechende Flag:

<connectionStrings>
  <add name="ApplicationDbContext" connectionString="data source=|DataDirectory|\data.sqlite3" providerName="System.Data.SQLite" />
</connectionStrings>

Und hier eines mit eingeschaltenen Foreign Key Constraints:

<connectionStrings>
  <add name="ApplicationDbContext" connectionString="data source=|DataDirectory|\data.sqlite3;foreign keys=true" providerName="System.Data.SQLite" />
</connectionStrings>

Leave a Reply

Your email address will not be published. Required fields are marked *