C# N:M关系和删除记录

C# N:M关系和删除记录,c#,model,entity,C#,Model,Entity,我有三个表:Context、Component和ComponentContext。ComponentContext表将组件和上下文链接到一个N:M关系中 我正在从事一个C#项目,该项目将大量数据导入这些表中。它使用一个实体模型,因此,我在代码中只看到一个组件实体和一个上下文实体 现在,仅使用这些实体,是否可以删除所有三个表的内容?例如,我可以使用: foreach (var obj in CPE.Context) { CPE.DeleteObject(obj); } 删除所有上下文记录。(CP

我有三个表:Context、Component和ComponentContext。ComponentContext表将组件和上下文链接到一个N:M关系中

我正在从事一个C#项目,该项目将大量数据导入这些表中。它使用一个实体模型,因此,我在代码中只看到一个组件实体和一个上下文实体

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

foreach (var obj in CPE.Context) { CPE.DeleteObject(obj); }
删除所有上下文记录。(CPE是上下文实体模型。)这当然失败了,因为上下文与组件有关系。所以我需要另一种方法


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

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

无论如何,要删除这些关系,此代码已足够:

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读取记录的方向相关的异常。现在它首先填充一个列表,然后沿着我喜欢的方向遍历列表