2010-05-05 3 views
0

TrackLog의 구성 요소 컬렉션이 TrackPoints 인 엔티티가 있습니다. TrackLog을 새로 만들고 Trackpoints을 추가하고 DB에 저장하십시오. 내 TrackLog 다시 잡아 내가 예상처럼 대신 하나의 SQL INSERT를 수행하는, 새로운 TrackPoint을 추가 할 때, 다시 추가 수집에있어 모든 TrackPoint을 다음 TrackLog와 관련된 모든 TrackPoints에서 삭제하고하고있어NHibernate를 사용하여 SQL DELETE를 수행하고 INSERT 할 구성 요소 컬렉션이있는 엔티티를 저장하고 있습니까?

.

이 NHProf의 출력입니다 : 구성 요소의 모음이 정상 동작은

UPDATE TrackLog SET Version = 2 etc... 
DELETE FROM TrackPoints WHERE TrackLog_Id = '80cc1e0d' etc... 
INSERT INTO TrackPoints etc.. 
INSERT INTO TrackPoints etc... 
INSERT INTO TrackPoints etc... 

내 질문은이 무엇입니까? 이것은 내 enum 컬렉션에서도 마찬가지입니다. 이것이 정상적인 동작이 아닌 경우 올바른 동작을 보이도록 매핑을 수정하려면 어떻게해야합니까? (TrackPoint에 INSERT를 한 개만 추가 했습니까?)

답변

1

정상입니다. 그것을 방지하기 위해

는 대신 bagset로 컬렉션을 선언 (및 호환되는 형식을 사용) 사용 사례가 지원하는 경우

+0

감사합니다, (같은 데이터를 두 개의 트랙 포인트가 될 수 없다 예) I 방금 나 같은 결론에 도달했습니다. 명심해야 할 또 다른 점은 구성 요소가 Equals()와 GetHashCode()를 오버라이드해야한다는 것입니다. 그렇지 않으면 성능이 더욱 떨어집니다 (하나의 DELETE 문이 아니라 각 항목에 대해 DELETE가 생성 된 다음 INSERT 각각 다시). –

+0

네, 맞습니다. 구성 요소에는 식별자가 없으므로 의미가 있습니다. NH가이를 구분할 수있는 유일한 방법입니다. –