Мы работаем с отслеживаемыми сущностями поверх EF 4.0.
Чтобы удалить сущность со всеми зависимыми сущностями, я пишу универсальный DeleteDependentEntities, который будет вызываться из метода Delete в EntityManager. (Мы не полагаемся или не хотим полагаться на CASCADE DELETE, который будет установлен для отношений в нашей базе данных.) DeleteDependentEntities сканирует рекурсивно все дочерние объекты подчиненного объекта Set.
Чтобы сделать его универсальным, чтобы его можно было использовать для всех сущностей в проекте, я использую динамические типы.
Метод заключается в следующем:
private void DeleteDependentEntities(dynamic entitySet, dynamic context)
{
if (entitySet != null)
{
foreach (dynamic item in entitySet.ToList())
{
// 1. Scan object for children and delete children
ProcessChildren(item, context);
// 2. Delete this object
context.DeleteObject(item);
}
}
}
Он компилируется нормально, но во время выполнения я получаю следующую ошибку:
'SLS.AnimalIntakeMgmt.DataTypes.TrackableCollection' не содержит определения для 'ToList'
Следовательно, вывод типа работает нормально. Проблема с определением ToList странная, так как TrackableCollection основана на ObservableCollection, которая, в свою очередь, основана на Collection.
ToList необходим, потому что в противном случае цикл foreach завершится неудачно, так как коллекция изменяется внутри цикла.
Все предложения приветствуются!