0

내가 작업 솔루션을 가지고 있지만 유창 매핑을 통해이를 달성 할 수있는 방법이 있는지 알고 관심을 가질만한 다른 곳에서 참조되지 않은 경우 계단식 삭제 일대 하나 ..유창함 NHibernate에 많은 쪽이

들어 단순, 내가 예시를 사용합니다 :

책이 삭제되고 지금, 나는 다른 책은 차와 현재 태그를 참조하는 경우 확인하기 위해 DB를 쿼리 비즈니스 사례가있다
class Tag { 
    string name; 
    IList<Book> books; 
} 

class Book { 
    string title; 
    Tag primaryTag; 
} 

. 그렇지 않은 경우 책을 삭제하고 그 후에 다른 곳에서 사용되지 않기 때문에 태그를 삭제합니다. 태그가 사용 중이라면 책 만 삭제합니다.

이제 네 차례 야 ... 매핑을 사용하여이를 달성하는 방법을 알고 있습니까? 나는 다음을 시도했다 :

BookMap : ClassMap<Book> { 
    ... 
    References(x => x.primaryTag) 
    .Cascade.All() //the collection in TagMap is set to "inverse" 
} 

놀랍지도 않지만 다른 책에서 태그를 사용할 때 외래 키 제약 조건 오류가 발생한다.

감사합니다, 마틴

답변

0

그렇게 할 수있는 방법은 없습니다. NHIbernate는 SQL Server 구성에서 계단식 삭제를 사용하여 수행 할 수있는 작업을 모방합니다. SQL Server에서 트리거를 사용하지 않고 상위 항목으로 이동하여 "고아"를 삭제할 수는 없습니다.

"Interceptors"을 사용하여 NHibernate에서 트리거를 모방하는 방법이 있습니다. 특정 엔티티에서 CRUD를 수신 한 다음 작업을 수행하는 방법입니다. 하지만 실제로는 안티 패턴입니다. 태그를 제거하는 메소드에 동일한 코드를 추가 할 수도 있기 때문입니다 (다음과 같은 숨겨진/모호한 접근 방식이 있습니다. 감사와 같은 크로스 커팅 문제에 유용합니다).

This is a really nice article 어떻게해야합니까? (하지만 거기에는로드가 있습니다. "google"NHibernate Interceptors ").

내가 삭제 실체를 확인하기 위해 Session.Delete(entity)를 사용해야합니다 거라고는 Session에서 제거 (정신에 대한)보다는