2

에서 삭제를 세 테이블 - 1. 비정상 2. 마크 업 3. Anomaly_Markup내가 가진 HasManyToMany

매핑 -

public AnomalyMap() 
    { 
     Table("anomaly"); 

     Id(x => x.Id).Column("ID").CustomType("decimal"); 

     HasManyToMany<DMMarkupData>(x => x.DMMarkupData) 
      .Table("anomaly_markup") 
      .ParentKeyColumn("ANOMALY_ID") 
      .ChildKeyColumn("MARK_UP_ID") 
      .Cascade.All() 
      .LazyLoad(); 
    } 

    public MarkupDataMap() 
    { 
     Table("markup"); 
     Id(x => x.Id).Column("ID"); 
    } 

상태 :

    변종에 의해
  1. 데이터를 저장 - 변종 MarkupData를 포함합니다. 그것은 데이터를 저장합니다. 그것은 나와 함께 기능을 작동합니다.
  2. 마크 업 삭제 -지도 테이블 및 마크 업 데이터에서 관계를 삭제해야합니다. 나는이 문제에 직면하고있다.

누구나 해결책을 찾고, 마크 업 데이터를 삭제하는 방법을 알려주십시오.

답변

0

MarkUpData와 Anomaly의 관계가 없습니다. 동일한 관계가 있어야하며 맵핑에서 역 속성을 사용하여 계단식 조작 제어를 지정해야합니다. 다음을 참조 할 수 있습니다. How to set "cascade delete" option to "Set Null" in Fluent NHibernate?

DMMarkupData를 삭제하려면 컬렉션에서 개체를 제거하고 Save Anomaly를 호출하십시오.

0

DMMarkupData -> Anomaly에서 관계를 정의하지 않은 것처럼 보이므로 NHibernate는 anomaly_markup 테이블에서 MarkupData 항목을 삭제할 수 없음을 알 수 있습니다 (역방향 관계가 있음에도 불구하고) . 당신은 MarkupData를 삭제할 때 anomaly_markup에서 엔트리를 제거하는 데이터베이스 레벨 캐스케이드로 코드를 해결하거나 코드에서 관계를 매핑 할 수 있습니다. & NHibernate 그러면 NHibernate가 캐스케이드를 수행합니다.

+2

Martin은 MarkupDataMap에 역방향 관계를 넣었을 때 중복 값이 ​​anomaly_markup 테이블에 삽입됩니다. 이 게시물을 참조하십시오 - http : // hackingon.net/post/Notes-on-NHibernate-Many-to-Many-Relationships.aspx –

+0

당신은 역관계를해야합니다. Inverse –

+2

조금 더 설명해 주시겠습니까? 그것을 들여다 주셔서 감사합니다. –

0

NHibernate는 객체 그래프를 관리하지 않고 지속 만합니다. 삭제 될 때 목록에서 항목을 제거하면 비즈니스 로직의 책임은 입니다!

(변경 사항을 처리하는 트랜잭션 내에서 불일치와 부작용을 유발할 수있는 트리거와 내용이있는 모든 트릭) 지속성 무지의 관점에서 보면 성능 ​​문제가있을 때만 수행합니다. 다른 방법으로는 해결할 수 없습니다.)

구성 요소을 사용하여 단순화 할 수 있습니다.

  • 당신이
  • 마크 업이 외부에 거주하지 않는 Anomality
  • 관련이없는 마크 업에 대한 Anomality 를 조회 할 필요가 없습니다

    • 당신이 다른 곳에서 같은 마크 업을 참조하지 않는 것을 제공

      이 모두 주어지면 구성 요소를 사용하는 것이 훨씬 쉽습니다. (나는 그것이 유창하게 어떻게 불려지는지 모르지만 xml 매핑에서 "composite-element"라고 불린다).

      구성 요소를 사용할 때 데이터베이스에서 마크 업을 삭제하지 않아도됩니다. 방금 살고있는 목록에서 제거하십시오.