Я хотел бы получить следующее поведение: при удалении объекта с родительского уровня первого уровня все сущности «потомок» удалялись автоматически, скажем, у меня есть класс библиотеки, в котором есть список «областей», каждая область имеетсписок «коридоров», и каждый коридор имеет список «рангов», каждый ранг имеет список книг.Вы поняли, что уровень понижается?
Схематическая модель:
Library
-----> Area
----------> Corridors
---------------> Ranks
--------------------> Book
Классы:
class Library {
public int Id {get;set;}
public List<Area> Areas {get;set;}
}
class Area {
public int Id {get;set;}
public Library Library {get;set;}
public List<Corridor> Corridors {get;set;}
}
class Corridor {
public int Id {get;set;}
public Area Area {get;set;}
public List<Rank> Ranks {get;set;}
}
class Rank {
public int Id {get;set;}
public Corridor Corridor {get;set;}
public List<Book> Books {get;set;}
}
class Book {
public int Id {get;set;}
public Rank Rank {get;set;}
public string Name {get;set;}
}
Я хотел бы, чтобы, когда я стер библиотеку, я стерла детей, которые были нужны в цепочке, каскаде.Я могу сделать это с помощью следующего кода, я сделал все мои классы наследуемыми от общего класса, который я назвал «Registry», и у всех них было общее свойство с именем «Library», и я настроил его следующим образом:
modelBuilder.Model.GetEntityTypes()
.Where(t => typeof(Registry).IsAssignableFrom(t.ClrType))
.ToList()
.ForEach(prop =>
{
modelBuilder
.Entity(prop.Name)
.HasOne(typeof(Library), "Library")
.WithMany()
.OnDelete(DeleteBehavior.Cascade);
});
Я протестировал с 20 классами и запустил в созданной миграции все 20 сущностей, имеющих FK, указывающий на Library , называемый "LibraryId" и ссвойство, "onDelete: ReferentialAction.Cascade" , но у меня есть структура с 650 классами, совершенно нецелесообразно наследовать их все от класса Registry , я думаю, что следуетбыть более простым и эффективным способом, но я не знаю, как это сделать ...