Как я могу удалить все записи, связанные с «Пользователем»? - PullRequest
3 голосов
/ 29 марта 2011

Я использую Entity Framework вместе со службой членства ASP.NET по умолчанию.У меня также есть третья таблица для «информации профиля».Я думал, что EF позаботится обо всем этом внутренне, но это не так.Когда я пытаюсь удалить пользователя, переходя по URL-адресу, например http://localhost:19506/User/Delete/SomeGUIDhere, я получаю некоторые неприятные ошибки, связанные с тем, что существуют ограничения внешнего ключа.

Как можно управлять этими типами зависимостей?Необходимость отслеживать все это побеждает цель EF, поэтому я предполагаю, что упускаю что-то незначительное.

EDIT , чтобы включить какой-то код, который у меня работает.Я все еще хочу знать, есть ли лучший способ, чем у меня ниже.Похоже, он очень быстро выйдет из-под контроля с множеством зависимостей от внешнего ключа.

public void DeleteUser(User u)
{
    db.Profiles.DeleteObject(u.Profile);
    db.aspnet_Membership.DeleteObject(u.aspnet_Membership);
    db.Users.DeleteObject(u);
    db.SaveChanges();
}

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Как могут быть эти типы зависимостей удалось? Необходимо следить за этим все виды поражений цели EF так что я предполагаю, что что-то упустил незначительный.

К сожалению, это все еще ручной процесс, и в два раза, как указал @Danny Varod:

  1. В вашей базе данных, предполагая, что отношение внешнего ключа уже установлено, убедитесь, что выбрано условие «При удалении -> Каскад». Вы можете изменить это в SQL Server Management Studio.

  2. В вашей модели сущности EF вы также должны указать эту опцию для отношений. Для этого просто выберите пунктирную линию между объектами, которые представляют отношения. В свойствах вы увидите соответствующую опцию «Каскадное удаление» - вы должны выбрать удаление для конца, который имеет 1 , а не *.

enter image description here

1 голос
/ 29 марта 2011

Каскадное удаление по отношениям концептуальной модели (и БД).

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