Entity Framework - удалить связанные записи по id - PullRequest
0 голосов
/ 20 декабря 2011

Хорошо.Предположим, у меня есть структура:

Школа -> ученики -> StudentParents <- родители -> адрес

В школе может быть много учеников, ученики могут быть родственниками и иметь одинаковыхнабор родителей (май ко многим).У каждого родителя может быть несколько адресов.
Предположим, что учащиеся с одинаковым набором родителей не могут учиться в разных школах.

Если задан school_Id = 5, я хочу удалить эту школуи все связанные записи.Как это легко сделать в Entity Framework 4?

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

Ответ на ваш вопрос будет таким же, как этот вопрос .

Вы пытаетесь решить проблему не в том слое. Вам нужно пересмотреть свой дизайн базы данных, особенно, как вы поддерживаете ссылочная целостность.

Вам необходимо установить «CASCADE DELETE» внешних ключей и отразить что в вашей модели сущности. Тогда база данных сделает необходимые изменения, чтобы сохранить ссылочную целостность при удалении этого юридическое лицо.

0 голосов
/ 20 декабря 2011

Entity Framework не может удалить данные из базы данных, которые не были созданы как объекты в памяти.Это означает, что вам нужно будет загрузить школьные данные, все данные учеников, все данные родителей учеников и т. Д., А затем вам нужно будет вручную удалить все данные.

Это кажется большой работой,поэтому вы можете использовать другой подход к этой проблеме - удалить все эти данные, используя хранимую процедуру в базе данных, которая сопоставлена ​​с ObjectContext, это будет работать лучше, поскольку вам не нужно будет помещать все данные в память.

Но это также кажется проблематичным.Наилучшим подходом было бы создать ограничение Cascade delete для базы данных и отобразить его также в модели структуры сущностей.Это имеет два преимущества: вам нужно будет загружать только школьные данные, и после того, как они будут удалены из модели, они будут удалены из базы данных, а каскадное удаление приведет к удалению всех ссылочных данных.Но если у вас есть данные о школах и учениках, которые уже находятся в памяти, EF позаботится о том, чтобы пометить эти объекты из памяти как удаленные, что приведет ваши данные в соответствие с состоянием базы данных.

Лучшее решение этой проблемы зависито том, можете ли вы изменять базу данных или нет.Если можешь - иди на cascade delete.Если вы не можете - я бы порекомендовал подход stored procedure как более эффективный (при условии, что производительность является проблемой, и в базе данных много учеников, родителей и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...