2009-06-10 97 views
0

我有三个表:Context,Component和ComponentContext。 ComponentContext表将组件和上下文链接为N:M关系。N:M关系和删除记录

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

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

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

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

(是的,我可以用SQL做相同的,但它是一个“可用性证明”实体模型,所以我要到模型尽可能范围内做尽可能多的。)

回答

0

然后我注意到我在代码中犯的愚蠢行为。它抱怨引用另一个表作为不删除上下文记录的理由。由于我只是添加了新的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将读取记录的方向有关的例外。现在它首先填满一个清单,然后沿着我喜欢的任何方向遍历清单...