클래스 A는 그 같은 매핑 된 B의 목록을 포함하고 있습니다.NHibernate : <idbag>의 삽입/업데이트 동작을 변경하고 싶습니다.
<class name="A" table="CLASS_A">
...
<idbag name="ListOfB"
table="CLASS_A_CLASS_B"
cascade="save-update">
<collection-id column="ID" type="Guid"> <!-- surrogate key -->
<generator class="guid.comb"/>
</collection-id>
<key column="ID_A"/>
<many-to-many column="ID_B" class="B"/>
</idbag>
</class>
DB 쪽에서는 CLASS_A & CLASS_B 테이블 사이에 many-to-many CLASS_A_CLASS_B 테이블을 조인하고 ID 대리 키를 가지고 있습니다. 다 대다 관계는 클래스 B의 객체 모델에 매핑되지 않습니다.
처음에는 ListOfB에 객체 X1과 X2가 있다고 가정 해 봅니다. X2를 제거하고 X3을 삽입하면 NHibernate가 X2를 가리키는 외래 키의 업데이트를 수행하여 X3을 가리킨다는 것을 알았습니다.
이것은 아주 좋은 최적화입니다.
그러나 내 목적을 위해, 나는 삭제를하기 위해 NHibernate에 M2M 조인 테이블 (X2에 대한 행 삭제, X3에 대한 새로운 행 삽입)에 새로운 삽입을 수행하는 트릭을하고 싶습니다. 이 테이블은 애플리케이션의 다른 인스턴스에 복제되므로 사용자에게 삽입/업데이트/삭제의 차이점을 보여주기를 바랍니다.
이 특별한 경우에는 유스 케이스가 실제로 "X2를 제거하고 X3을 추가했습니다."이므로 diff 대신 사실 (업데이트 대신)을 표시하고 싶습니다. 이 동작은 차선책이라고 이해하지만이 경우 중요하지 않습니다.
그 일을 NHibernate 트릭 방법?
마크를 매핑 코드 ... 다시 동작을 트리거 할 수 없었다 및 편집기의 "코드 샘플"버튼을 클릭했습니다. 그런 다음 우리는 그것을 볼 수 있습니다 :-) –