使用EF Code First删除MVC 4中的儿童和父母

时间:2013-02-18 22:38:27

标签: asp.net-mvc asp.net-mvc-3 entity-framework asp.net-mvc-4

我有一些父/子关系如下:

public class Card
{
    public virtual int CardId { get; set; }
    public virtual Set ParentSet { get; set; }
    public virtual IList<Side> Sides { get; set; }
}

public class Set
{
    public virtual int SetId { get; set; }
    public virtual Set ParentSet { get; set; }
    public virtual IList<Card> Cards { get; set; }
}

public class Side
{
    public virtual int SideId { get; set; }
    public virtual Card ParentCard { get; set; }
}

因此,Set包含包含Sides的卡片。集合还可以包含其他集合。

我尝试创建一个基本的删除控制器操作:

public ActionResult DeleteConfirmed(int cardId)
{
    Card card = _db.Cards.FirstOrDefault(c => c.CardId == cardId);
    if (card == null)
    {
        return HttpNotFound();
    }

    _db.Cards.Remove(card);
    _db.SaveChanges();
    return RedirectToAction("Detail", "Set", new {setId = card.ParentSet.SetId});
}

但是我得到一个错误DbUpdateException:

“保存未公开其关系的外键属性的实体时发生错误.EntityEntries属性将返回null,因为无法将单个实体标识为异常的来源。保存时可以更轻松地处理异常通过在实体类型中公开外键属性。“

如果需要,我可以在此处发布详细信息,但我感觉这是与我的模型或配置相关的问题。我想我没有必要为每个将父FK归零的实体构建一个级联删除方法....对吗?

1 个答案:

答案 0 :(得分:1)

您会看到此错误,因为您要删除包含外键的项目。

您应该删除卡片==删除卡片的所有面。

Here You can find more information about deleting in EF