Как удалить содержащиеся objBs из objA на ActionResult Delete? - PullRequest
2 голосов
/ 23 октября 2011

Попытка удалить ICollection из B из объекта A в действии удаления, но получить эту ошибку:

"Ошибка. Оператор DELETE конфликтует с ограничением REFERENCE"

Имеет смысл, но я просто не знаю, как сначала удалить содержащиеся ICollection Bs, или думал, что они будут автоматически удалены:

 public ActionResult DeleteConfirmed(int id)
    {            
        A objA = db.As.Find(id);
        //  **NOTE:**  objA has a ICollection of objB's here that I tried to iterate and
        //             delete them here using: foreach (var i in A.Bs) {db.Bs.Remove(i);} : didn't work
        db.As.Remove(objA);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

Ответы [ 3 ]

1 голос
/ 23 октября 2011

Я согласен с Хасаном здесь - просто предоставил больше информации, специфичной для Entity Framework, так как именно там это было помечено.

Обратите внимание на специфическое поведение структур сущностей здесь:

http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx

    If you add an Cascade delete rule to the model, you MUST have a corresponding DELETE rule in the database.
    If you absolutely insist on breaking rule (1) for some reason, Cascade will only work if you have all the dependents loaded in memory.
    (2) is *not* recommended!!!

Также Проблема с каскадным удалением с использованием Entity Framework и System.Data.SQLite

1 голос
/ 23 октября 2011

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

enter image description here

См. Правила обновления и удаления внешнего ключа SQL Server для получения подробной информации.

0 голосов
/ 23 октября 2011
public ActionResult DeleteConfirmed(int id) 
{             
    A objA = db.As.Find(id); 
    objA.Bs.Clear();
    db.As.Remove(objA); 
    db.SaveChanges(); 
    return RedirectToAction("Index"); 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...