#c_sharp #entity_framework
Entity Framework 6, Code First, SQLite Есть дерево категорий. Если удалить категорию, которая включает в себя подкатегории, подкатегории не удаляются каскадно. Они по прежнему имеют ParentId, указывающий на уже не существующую категорию. Модель ссылающаяся на себя: public class Category { public string Title { get; set; } public int SortOrder { get; set; } public int? ParentId { get; set; } public Category Parent { get; set; } public ICollectionChildren { get; set; } public ICollection Products { get; set; } } Конфигурация: public class CategoryConfiguration : EntityTypeConfiguration { public CategoryConfiguration() { Property(p => p.Title).IsRequired(); HasOptional(p => p.Parent) .WithMany(p => p.Children) .HasForeignKey(p => p.ParentId) .WillCascadeOnDelete(true); } } Таблица: CREATE TABLE Categories ( Id INTEGER PRIMARY KEY, Title nvarchar NOT NULL, SortOrder int NOT NULL, ParentId int, FOREIGN KEY (ParentId) REFERENCES Categories (Id) ON DELETE CASCADE ); CREATE INDEX IX_Category_ParentId ON Categories (ParentId) Метод удаления категории: public void Delete(Category category) { using (var db = new DbContext()) { var entity = db.Categories.Find(category.Id); if (entity != null) { db.Categories.Remove(entity); } db.SaveChanges(); } } Подскажите, почему не происходит каскадного удаления?
Ответы
Ответ 1
Проблема оказалась в следующем: в SQLite по умолчанию отключена поддержка ограничения внешних ключей. Для ее включения необходимо установить PRAGMA foreign_keys = ON. Это можно сделать, изменив строку подключения ConnectionString в конфиге: data source=C:\Dbs\myDb.db;foreign keys=true;
Комментариев нет:
Отправить комментарий