2009-12-29 6 views
7

내가 많은 하위 영역 자식이있는 지역 객체를 저장합니다자 NHibernate는/업데이트 이벤트 리스너를 저장합니다 자식 개체에 대해 듣고는

그는 아이들은 단방향이 아닌 반비례 관계로 매핑하는
public class Area 
{ 
    ... 
    public virtual IList<SubArea> SubAreas { get; set; } 
} 

:

public class AreaMapping : ClassMap<Area> 
{ 
    public AreaMapping() 
    { 
     HasMany(x => x. SubAreas).Not.Inverse().Cascade.AllDeleteOrphan(); 
    } 
} 

영역은 내 기본 루트입니다. 영역 (예 : Session.Save (영역))을 저장하면 영역이 저장되고 하위 하위 영역이 자동으로 계단식으로 연결됩니다.

내 구역 및/또는 하위 영역이 지속될 때마다 저장 또는 업데이트 이벤트 수신기를 추가하여 이벤트를 수신하려고합니다. 예를 들어 5 개의 하위 영역이있는 영역이 있다고합시다. 내가 SaveEventListeners에 훅 경우

Configuration.EventListeners.SaveEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener }; 

을 나는 지역을 저장하는 경우에 myListener는 영역 일단 해고 전용 (SubArea에 무시됩니다). 나는 5 개의 SubAreas가 이벤트 리스너에서도 잡힐 수 있기를 바랍니다. 내가 대신 SaveOrUpdateEventListeners에 훅 경우

Configuration.EventListeners.SaveOrUpdateEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener }; 

을 나는 지역을 저장하는 경우에 myListener는 전혀 해고하지 않습니다. 각 SubArea이 두 번 지역을 위해 한 번, 그리고 : 나는 영역을 저장하는 경우에 myListener 해고되어

Configuration.EventListeners.SaveEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener }; 
Configuration.EventListeners.SaveOrUpdateEventListeners = 
    new ISaveOrUpdateEventListener[] { mylistener }; 

11 배 : 이상하게도, 나는 SaveEventListeners SaveOrUpdateEventListeners에 훅 경우! (NHIbernate가 SubArea를 INSERT하고 Area Foreign Key로 UPDATING하기 때문에)

내가 뭘 잘못하고 있는지 아는 사람이 있고, 청취자에게 화재가 발생하는 이유는 무엇입니까 각 지역 및 하위 영역에 대해 한 번?

+0

해결 했습니까? 같은 문제가 – andy

+0

나도! 누구든지 해결책을 찾았습니까? – nozzleman

답변

0

귀하의 질문에 100 % 관련이 없지만 귀하의 컬렉션에 inverse = "true"로 매핑하면 최소한 업데이트 문을 가져올 수 없습니다.

+0

사실,하지만이 작업은 개체 모델에서 단방향으로 관계를 설정해야 할 필요가 있다고 생각합니다. (SubArea도 Area에 대한 참조를가집니다.)하지만이 경우에는 필요하지 않거나 필요하지 않습니다. –

+0

확실히 문제를 해결하는 가장 쉬운 방법 일 것입니다. @ JamesAllen - SubArea에서 Area까지 many-to-one을 원하십니까? –

0

NH는 개체 ID를 알 수없는 경우 (IDENTITY 또는 SEQUENCE 등) INSERT 문을 실행합니다.

그래서 DB에 라운드 트립트가 필요없는 ID 생성기 (예 : guid 또는 guid.combo)를 사용해야하는 경우 무효화하고 싶습니다.

관련 문제