0

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

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 还可以包含其他 Set。

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

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 无效的实体构建级联删除方法......对吗?

4

1 回答 1

1

您看到此错误是因为您想使用 Forgein Key 删除项目。

您应该删除 Card==Deleting Card 的所有面。

在这里您可以找到有关在 EF 中删除的更多信息

于 2013-02-18T22:49:34.420 回答