0

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

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

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

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

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

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

4

1 回答 1

0

然后我注意到我在代码中所做的愚蠢。它抱怨引用另一个表作为不删除上下文记录的原因。由于我刚刚添加了新的 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 读取记录的方向相关的异常。现在它首先填充一个列表,然后以我喜欢的任何方向遍历列表......

于 2009-06-10T14:27:33.813 回答