엔트리라는 엔티티가 여러 TimeWindows에 연결되어 있습니다. 모든 시간 창을 지우고 새 창을 추가하고 싶습니다.Entity Framework의 모든 관련 엔터티 삭제하기
target.TimeWindows.Clear();
을하지만 정말 삭제하지 않았고, 단지 는 항목에 TimeWindows에서 외래 키가 있기 때문에 예외가 발생 관계를 제거 할을 시도 : 처음에 나는 시도했다. 그리고 나는이 작업을 수행해야한다고 생각 :
foreach (var tw in target.TimeWindows)
context.DeleteObject(tw);
하지만 컬렉션에 foreach
문 내부에 수정 된 이후이뿐만 아니라 예외를 throw합니다.
while (target.TimeWindows.Count > 0)
context.DeleteObject(target.TimeWindows.Last());
을하지만 지금은 그것이 SQL SELECT COUNT
문이 실행되도록 할 수 있기 때문에, Count
속성을 사용하는 방법에 대한 약간의 걱정 : 그래서 나는이 생각했다. 그거야? 그렇다면 Entity Framework에서 모든 시간 창을 어떻게 삭제할 수 있습니까?
아니요, 'Count'는 데이터베이스에서 'SELECT COUNT'을 트리거하지 않으며, 악화됩니다 :-). 그것은'SELECT * FROM TimeWindows WHERE TargetId = @ P0'을 수행하고 메모리 내 수집을 계산합니다. – Steven
오 마이 갓 !! 그럼 당신 제안은 뭐니?! – Rafid
엔티티를 삭제하려면 먼저 엔티티를 메모리에로드해야합니다. 모든 O/RM 도구가 이러한 방식으로 작동합니다. Entity Framework도 마찬가지입니다. 성능이 너무 낮 으면 삭제를 수행하는 저장 프로 시저를 작성하십시오. – Steven