2012-12-13 4 views
1

기존 * .hbm.xml 파일을 유창한 ClassMaps로 업데이트하는 중입니다. 매핑 파일에서 실수를 범했습니다. 내가 올바르게 매핑하는 기본 동작을 알지 못합니다.Fluent NHibernate에 일대일 연속 삭제 - 고아가 없음

매핑 파일이 있습니다

<one-to-one name="LineItemAssembly" 
      class="LineItemAssembly" 
      cascade="all-delete-orphan" /> 

유창함 사용하는 경우, 나는이에 매핑 기대 : AllDeleteOrphan()가 캐스케이드의 전원 옵션을 선택하지 않습니다 (단

HasOne<LineItemAssembly>(x => x.LineItemAssembly) 
         .Cascade.AllDeleteOrphan(); 

제대로 그래서). 그게 옵션이 아니기 때문에 그게 이해가 매핑 파일에 오류가 있기 때문입니다. 유창한 매핑이 .hbm.xml 파일과 완전히 똑같은 기능을 갖도록 Fluent를 사용하는 동등한 매핑은 무엇입니까? Fluence 매핑에서 캐스케이드를 벗어나는 것이 기본 동작이 될 것이라고 생각 하겠지만 확실하지는 않습니다.

답변

0

결국 나는 유창한 기본 동작과 관계없이 무엇이 잘못되었는지 파악하고이를 수정해야했습니다. http://brunoreis.com/tech/fluent-nhibernate-hasone-how-implement-one-to-one-relationship/의 도움으로이 문제를 해결할 수있었습니다.

.Cascade.All()을 추가해야했습니다. 그러나 실제로 필요한 것은 LineItemAssembly 클래스에 대한 매핑에서 .ForeignKey()를 사용하여 HasOne 관계를 해제하는 것입니다.

2

1 : 1 관계에서 고아를 가질 수 없으므로 정의에 따라 두 레코드가 모두 존재해야합니다. 삭제는 항상 1 : 1로 계단식으로 수행됩니다. 나는 왜 XML 맵이 그것을 허용했는지 모른다.

+0

감사에서 다운로드 할 수 있습니다, 나는 이해한다. 나는 이걸 정확하게 동일하게 매핑하고 싶다. NHibernate가 이것을 유감스럽게 생각하고 유창하지는 않은 것 같아서 Fluent를 용서하는 방법을 모른다. – bunggo

+0

저의 이해는 아이가 존재할 필요가 없다는 것입니다. NHibernate는 자식이 존재하지 않고 참조가 null 일 때 행복하다. 자식이 존재하고 그것을 null로 설정하면, 그 자식은 고아가 될 것이다. 그리고 이제 NHibernate 4.1은 고립 된 일대일 엔티티를 삭제할 수있다. 내 대답을 보라. – xhafan

1

이 기능은 이제 NHibernate 4.1에서 지원됩니다 - 1 대 1의 릴레이션 배 캐스케이드 "all-delete-orphan"이 올바르게 지원됩니다 (NH-1262은 4.1에서 수정되었습니다). 난 그걸 테스트하고 그것이 작동하는지 확인할 수 있습니다 - 당신이 자식 일대일 속성을 null로 설정하면, 자식에 대해 sql delete 명령을 실행합니다.

불행하게도, 유창한 NHibernate에 당신이 How to build Fluent NHibernate? 소스 코드 (https://github.com/jagregory/fluent-nhibernate에서 유창한 NHibernate에 자신을 구축 할 수 있습니다, 그것은 지난 2015 년에 업데이트되었습니다, 그것은을 지원하지 않지만, 나는이 조금 고생 - 당신은 설치해야 ruby, rubygems, InstallGems.bat를 실행하고 수동으로 "번들 설치"(어떤 이유로 든 실행되지 않음)를 실행하고 "rake"명령을 사용하여 솔루션을 빌드하십시오.

그런 다음 당신이 할 일은 (당신은 또한 FluentNHibernate.sln를 열고 2010+ 비주얼 스튜디오를 사용하여 구축 할 수 있습니다,하지만 당신은에서 명령을 실행 "긁어"해야 CascadeExpression 클래스에 CollectionCascadeExpression 클래스에서 방법 AllDeleteOrphan를 이동하고 구축하는 것입니다 적어도 한 번). 사용자 정의 hasOne의 AllDeleteOrphan 지원 FluentNHibernate.dll 버전 2.0.3.1 (내게로) 내장

enter image description here

here