2009-06-10 3 views
0

문맥, 구성 요소 및 ComponentContext라는 세 개의 테이블이 있습니다. ComponentContext 테이블은 구성 요소와 컨텍스트를 N : M 관계로 연결합니다.N : M 관계 및 레코드 삭제

저는이 테이블에 많은 데이터를 가져 오는 C# 프로젝트를 만들고 있습니다. 엔티티 모델을 사용하므로 결과적으로 코드 내에서 구성 요소 엔티티와 컨텍스트 엔티티 만 볼 수 있습니다.

이제 이러한 엔티티 만 사용하면 세 테이블 모두의 내용을 삭제할 수 있습니까? 예를 들면 다음과 같습니다.

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

모든 컨텍스트 레코드를 삭제하려면 다음을 수행하십시오. (CPE는 Context 엔티티 모델입니다.) Context는 Components와 관계가 있기 때문에 이것은 실패합니다. 그래서 다른 방법이 필요합니다.

(그리고 그래, 나는 동일한 기능을 수행 할 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); 
} 

내가 BTW, 습관의 밖으로 ToList()를 사용합니다. .NET에서 레코드를 읽는 방향과 관련된 몇 가지 예외를 피하는 경향이 있습니다. 이제는 목록을 채우고 선호하는 방향으로 목록을 살펴 봅니다.