2012-08-16 1 views
0

내가 NHibernate에 매핑이이 삭제 방지 :자 NHibernate : Laziness.NoProxy 소프트

public AnswerSet_AnswerMap() { 
     Table("DB.AnswerSet_Answer"); 
     Id(x => x.AnswerSet_AnswerId); 
     References(x => x.Answer, "BaseAnswerID").LazyLoad(Laziness.NoProxy); 
     References(x => x.AnswerSet, "AnswerSetID").Fetch.Join(); 
     Map(x => x.Format); 
    } 

그것은이 "AnswerSet"과 "대답"사이의 접합 테이블입니다. 응답 참조의 .LazyLoad (Laziness.NoProxy)는 애플리케이션에서 필요하지만 AnswerSet_Answer 객체가 데이터베이스에서 부드럽게 삭제되는 것을 방지합니다 (데이터베이스에 변경되지 않은 상태로 유지됨). 왜 이런 일이 일어나는 지 아는 사람이 있습니까?

+0

"소프트 삭제"는 사용자가 실제로 행을 삭제하지 않고 "삭제됨"을 나타내는 열을 설정한다는 의미입니다. NHibernate는 당신을 위해 그것을하지 않습니다. 실제 삭제를 계단식으로하는 방법에 대해 묻고 있습니까? – dotjoe

+0

나는 그렇게 생각한다. 내 실제 클래스는 그것을 삭제할 수있는 다른 클래스를 구현하므로 NHibernate 외부에 있다고 가정합니다. – Kuzay

+0

* "응용 프로그램에서 응답 참조의 .LazyLoad (Laziness.NoProxy)가 필요합니다."* "이 유효성이있는 응용 프로그램을 아직 보지 못했습니다. –

답변

0

캐스케이드 추가를 시도 했습니까? 캐스케이드. 데일 테일러?

NHibernate 케스케이드 : 엔티티는 다른 개체에 대한 연관성이 있습니다.이 개체는 단일 항목 (다 대일) 또는 컬렉션에 대한 연결 (일대 다, 다 대다) . 어쨌든 NHibernate에게 엔티티의 연관을 자동으로 트래버스하고 계단식 옵션에 따라 작동하도록 알릴 수 있습니다. 예를 들어 save-update cascade를 가진 콜렉션에 저장되지 않은 엔티티를 추가하면 우리 측에서 명시 적으로 지시 할 필요없이 상위 오브젝트와 함께 저장됩니다. 다음은 각 계단식 옵션의 의미입니다.

없음 - 계단식을 사용하지 말고 사용자가 직접 처리하도록하십시오. save-update - 개체를 저장/업데이트 할 때 연결을 확인하고이를 필요로하는 개체를 저장/업데이트합니다 (다 대 다 시나리오에서 연결 저장/업데이트 포함). 삭제 - 개체가 삭제되면 연결의 모든 개체가 삭제됩니다. delete-orphan - 개체가 삭제되면 연결의 모든 개체가 삭제됩니다. 그 외에도 개체가 연결에서 제거되고 다른 개체 (분리됨)와 연결되지 않은 경우 개체도 삭제합니다. all - 개체가 저장/업데이트/삭제 될 때 연관을 확인하고 발견 된 모든 개체를 저장/업데이트/삭제합니다. all-delete-orphan - 개체가 저장/업데이트/삭제 될 때 연결을 확인하고 발견 된 모든 개체를 저장/업데이트/삭제합니다. 그 외에 객체가 연관에서 제거되고 다른 객체와 연결되지 않은 경우 (고아) 객체도 삭제합니다.

그러나 캐스케이드는 orpahnd 레코드를 삭제하고 "소프트 삭제"하지 않습니다. 부드러운 삭제에 대한 은이 링크를 찾습니다. Soft Deletes In NHibernate

+0

그 이상의 hasmany 관계에 대한 내 경우에는 BaseAnswer 테이블과 그 테이블의 각 레코드가 BaseAnswer에 대한 레코드가있는 "Answer"테이블의 여러 다른 유형이 있습니다. – Kuzay

+0

은 캐스케이드에 대한 정보로 내 대답을 업데이트했습니다. – yonigozman