2011-04-18 5 views
0

내가 사소한 두 개의 엔티티에 대한 매핑이 : 설문 조사와 POLLOPTION을자 NHibernate와 hasMany의 매핑

설문 조사 :

public class PollMap : ClassMap<Poll> 
{ 
    public PollMap() { 
     Id(x => x.Id); 

     Map(x => x.Content); 

     HasMany(x => x.PollOptions).Cascade.All(); 
    } 
} 

POLLOPTION : 테스트 코드 메신저에서

public class PollOptionMap : ClassMap<PollOption> 
{ 
    public PollOptionMap() { 
     Id(x => x.Id); 

     Map(x => x.Content); 

     References(x => x.Poll); 
    } 
} 

가 시도 폴링 엔티티의 첫 번째 폴링 제거

테스트 코드 :

[Transaction] 
    public ActionResult Add() { 

     var poll = new Poll() { 
      Content = "poll", 
      PollOptions = new List<PollOption>() { 
       new PollOption(){ 
        Content="PollOption#1" 
       }, 
       new PollOption(){ 
        Content="PollOption#2" 
       } 
      } 
     }; 

     GetSession.Save(poll); 

     return Content("Added"); 
    } 

    [Transaction] 
    public ActionResult Removed() { 

     var poll = GetSession.Query<Poll>().FirstOrDefault(); 

     poll.PollOptions.RemoveAt(0); 

     GetSession.Update(poll); 

     return Content("Updated"); 
    } 

가 제거 작업을 대신 내 외래 키 :(

polloption table

PS에 널 (null)을 설정 DB에서 POLLOPTION을 삭제하지졌습니다. Google은 도움 안됨

답변

1

Cascade.All()은 부모가 삭제 된 경우에만 하위 개체 만 삭제합니다. 컬렉션에서 컬렉션을 삭제할 때 하위 항목을 삭제하려면 Cascade.AllDeleteOrphan()이 필요합니다.

추가 참고 사항 : 양방향 연결의 한면을 Inverse()으로 표시해야합니다. 여기에 대한 자세한 정보는 다음을 참조하십시오 : http://nhibernate.info/doc/nh/en/index.html#collections-bidirectional

+0

아니요 : cascade = "all-delete-orphan"이 포함 된 컬렉션은 더 이상 소유 엔터티 인스턴스에 의해 참조되지 않았습니다. – Sasha

+0

@msony 어떤 오류가 발생합니까? –

+0

어쨌든 부모님과 키가 연결되어 있지 않은 것처럼 보입니다 – Sasha

관련 문제