N:M关系和删除记录

时间:2009-06-10 13:57:39

标签: c# model entity

我有三个表:Context,Component和ComponentContext。 ComponentContext表将Component和Context链接为N:M关系。

我正在开发一个C#项目,它将大量数据导入这些表中。它使用实体模型,因此,我只在代码中看到一个Component实体和一个Context实体。

现在,只使用这些实体,是否可以删除所有三个表的内容?我可以,例如使用它:

foreach (var obj in CPE.Context) { CPE.DeleteObject(obj); }

删除所有上下文记录。 (CPE是Context实体模型。)当然,这会失败,因为Context与组件有关系。所以我需要另一种方法。

(是的,我可以使用SQL来做同样的事情但它是实体模型的“可用性证明”所以我想在模型中尽可能多地做。)

1 个答案:

答案 0 :(得分:0)

然后我注意到我在代码中做出的愚蠢。它抱怨对另一个表的引用是不删除Context记录的原因。由于我刚刚添加了新的ComponentContext表,我将其归咎于那个,但是下次我应该更仔细地阅读这些错误消息。 (还有另一个链接到Context表的表。)

无论如何,要删除这些关系,这段代码就足够了:

foreach (var obj in CPE.Components.ToList())
{
    obj.Context.Load();
    foreach (var child in obj.Context.ToList()) { obj.Context.Remove(child); }
    CPE.DeleteObject(obj);
}

我习惯使用ToList(),顺便说一下。它倾向于避免与.NET将读取记录的方向相关的一些例外。现在它首先填写一个列表,然后按照我喜欢的方向遍历列表...