SQLiteとEntity Framework 6(EF6)でON DELETE CASCADEを使用できません。私が行方不明のものはありますか?SQLiteとEntity Framework 6でON DELETE CASCADEを使用する方法
Visual Studio 2015でC#でWindowsフォームアプリケーションを作成しました。アプリケーションでEF6とSQLiteがうまく連携していたため、データを挿入して取得できました。しかし、それは物事を削除するには、1つの行/エンティティを削除するうまく動作しますが、カスケードはまったく動作しません。 SQLiteのDBブラウザでは、まったく同じ行が削除され、カスケードが機能しました。
これはノードを表し、私のテーブルです:
CREATE TABLE `Nodes` (
`NodeId` INTEGER,
`ParentId` INTEGER,
`Label` TEXT,
PRIMARY KEY(`NodeId`),
FOREIGN KEY(`ParentId`) REFERENCES `Nodes`(`NodeId`) ON DELETE CASCADE
);
そして、これは私が(カスケードですべての子ノードを削除することになって)「ルート」ノードを削除しています方法です:
var noParentItems = entities.Nodes.Where(n => n.ParentId == null);
foreach (var root in noParentItems)
{
//entities.Entry(root).State = EntityState.Deleted;
entities.Nodes.Remove(root);
}
entities.SaveChanges();
注: 「root」を削除するコメント付きバージョンも試しました。 ここでは、すべてのルートノードをキャッチするためにループしていることがわかりますが、これは重要ではありません。
私はEF6のデータベースファーストアプローチを使用しています。これを修正するために、生成されたファイルを変更したくないことに注意してください。
また、これらのソリューションは私のために動作しませんでした:
- Entity Framework On Delete Cascade when entity is loaded:何も
- を変更しないデザイナー(How to delete a row with data with its parent row in another table)に "カスケード" を入れてください:何も
- 使用「entities.Nodesを変更しません。アタッチ(ルート); "下記の回答のいずれかで示唆されているように、いずれも動作しませんでした。
必要な場合は、追加情報をお気軽にお尋ねください。
ありがとうございました。
https://stackoverflow.com/a/34038321/2946329 –
またはhttps://stackoverflow.com/a/37459049/2946329 –
よく、私は生成されたファイルを変更したくないし、OnModelCreating()生成されたファイルで上書きされます。回避策はありますか? – Sheep