Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
SDmaN
56 / 53 / 8
Регистрация: 22.07.2011
Сообщений: 436
1

Каскадное удаление в Entity Framework

06.12.2015, 19:06. Просмотров 622. Ответов 7
Метки нет (Все метки)

Сегодня наткнулся на такую беду: entity framework каскадно удаляет только те сущности, которые уже были загружены заранее. Можно ли как-то обойти это ограничение?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2015, 19:06
Ответы с готовыми решениями:

Entity Framework Code First Каскадное удаление
Создал базу данных с помощью Entity Framework Code First: namespace...

Entity Framework. Удаление entity без удаления связей
Вечер добрый. Есть модель Coder First. Каскадное удаление запрещено. ...

В чем разница между Entity Framework и Entity Framework Core?
В чем разница (если она есть) между entity framework и entity framework core?

Entity Framework удаление связанных записей (Ирархия)
Привет, есть модель данных. public class Tree { public Tree...

Каскадное удаление EF
Здравствуйте. Хочется понять, как в EF можно настроить каскадное удаление....

7
kolorotur
Эксперт .NET
10617 / 8798 / 2195
Регистрация: 17.09.2011
Сообщений: 15,073
Завершенные тесты: 1
06.12.2015, 19:45 2
Цитата Сообщение от SDmaN Посмотреть сообщение
Можно ли как-то обойти это ограничение?
Конечно — убедитесь, что каскадное удаление включено на связи в базе.
0
SDmaN
56 / 53 / 8
Регистрация: 22.07.2011
Сообщений: 436
06.12.2015, 21:38  [ТС] 3
Цитата Сообщение от kolorotur Посмотреть сообщение
Конечно — убедитесь, что каскадное удаление включено на связи в базе.
В том то и дело, что в базе оно включено (к тому же использую code first и связь устанавливается еще в коде). Если нужные зависимые сущности были загружены ранее (подразумевается Lazy Loading), то они без проблем удаляются, но если не были, то EF их и не трогает. Пока что решил проблему загрузкой нужных сущностей заранее при помощи Include и Select, но надеюсь на более "хорошее" решение.
0
kolorotur
Эксперт .NET
10617 / 8798 / 2195
Регистрация: 17.09.2011
Сообщений: 15,073
Завершенные тесты: 1
06.12.2015, 23:08 4
Цитата Сообщение от SDmaN Посмотреть сообщение
Если нужные зависимые сущности были загружены ранее (подразумевается Lazy Loading), то они без проблем удаляются, но если не были, то EF их и не трогает.
Значит у вас связи неправильно в базе построены.
Если подсоединиться к базе и прописать обычный DELETE запрос на родительскую сущность, то зависимые удаляются?
0
SDmaN
56 / 53 / 8
Регистрация: 22.07.2011
Сообщений: 436
07.12.2015, 00:57  [ТС] 5
Цитата Сообщение от kolorotur Посмотреть сообщение
Если подсоединиться к базе и прописать обычный DELETE запрос на родительскую сущность, то зависимые удаляются?
Связи построены правильно. При запросе DELETE удаляются зависимые сущности.
Я использую SQLite в своем проекте, а для него в Entity Framework не работает Code First. Я пользуюсь сторонней библиотекой для этого. Возможно дело в ней. Но на всякий случай прикладываю файл БД.
db.zip
0
kolorotur
Эксперт .NET
10617 / 8798 / 2195
Регистрация: 17.09.2011
Сообщений: 15,073
Завершенные тесты: 1
07.12.2015, 01:03 6
Цитата Сообщение от SDmaN Посмотреть сообщение
Связи построены правильно. При запросе DELETE удаляются зависимые сущности.
А при использовании EF сама сущность удаляется из таблицы?
И что тогда происходит с зависимыми сущностями, которые связаны с удаленной? Они остаются висеть в таблице со старым ключем? Или значение ключа устанавливается на NULL?
1
SDmaN
56 / 53 / 8
Регистрация: 22.07.2011
Сообщений: 436
07.12.2015, 08:21  [ТС] 7
При удалении через EF сущности удаляются, но каскадного удаления не происходит. Зависимые сущности остаются висеть в таблице со старым ключом. Кроме того, если вновь добавить родительскую сущность с тем же ключом, то зависимые привязываются к добавленной.
0
kolorotur
Эксперт .NET
10617 / 8798 / 2195
Регистрация: 17.09.2011
Сообщений: 15,073
Завершенные тесты: 1
07.12.2015, 10:32 8
Цитата Сообщение от SDmaN Посмотреть сообщение
При удалении через EF сущности удаляются, но каскадного удаления не происходит. Зависимые сущности остаются висеть в таблице со старым ключом.
Ну так на этом этапе уже от базы зависит, как именно будут удаляться зависимые сущности.
Если зависимости не удаляются при удалении родительской сущности, то это уже косяк в базе.

С другой стороны, что делает EF с базой? Может она каждый раз ее пересоздает заново?
Попробуйте отследить запросы, которые отсылает EF базе с начала работы приложения — возможно, в какой-то момент она пересоздает зависимость с ON DELETE NO ACTION.

C#
1
2
3
4
5
6
7
8
class YourEntitiesClass : DbContext
{
   public YourEntitiesClass()
   {
      // Выводить все SQL-запросы в консоль.
      this.Database.Log = Console.WriteLine;
   }
}
0
07.12.2015, 10:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2015, 10:32

Entity framework One vs Zero-or-One
При настройке ассоциаций между двумя сущностями можно выбрать чтобы на конце...

Entity Framework 6
Нарисовалась неожиданная проблемка. Штудирую Троелсена, там описание Framework...

Не выполняется каскадное удаление
Суть проблемы.Встал вопрос о переводе БД с MS SQL SERVER на локальную...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru