我有三个表:Context,Component和ComponentContext。 ComponentContext表将Component和Context链接为N:M关系。
我正在开发一个C#项目,它将大量数据导入这些表中。它使用实体模型,因此,我只在代码中看到一个Component实体和一个Context实体。
现在,只使用这些实体,是否可以删除所有三个表的内容?我可以,例如使用它:
foreach (var obj in CPE.Context) { CPE.DeleteObject(obj); }
删除所有上下文记录。 (CPE是Context实体模型。)当然,这会失败,因为Context与组件有关系。所以我需要另一种方法。
(是的,我可以使用SQL来做同样的事情但它是实体模型的“可用性证明”所以我想在模型中尽可能多地做。)
答案 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将读取记录的方向相关的一些例外。现在它首先填写一个列表,然后按照我喜欢的方向遍历列表...