1

다음과 같은 매핑이 있지만 상태 엔티티를 삭제하면 Nhibernate가 삭제 대신 자식에 대한 업데이트를 실행합니다. 이 SQL에서Nhibernate 3.x 캐스케이드 - 업데이트 중

public StatusMap() 
{ 
    Property(x => x.Date); 
    Property(x => x.Text, map => map.Type(NHibernateUtil.StringClob)); 
    Property(x => x.Type);   
    ManyToOne(x => x.User, map => map.Column("UserId"));    
    Bag(x => x.Comments, map => { map.Key(km => km.Column("StatusId")); }, action => action.OneToMany()); 

    Bag(x => x.Likes, map => { map.Key(km => km.Column("StatusId")); map.Cascade(Cascade.DeleteOrphans); }, action => action.OneToMany()); 
} 


public StatusLikeMap() 
{ 
    ManyToOne(x => x.User, map => map.Column("UserId")); 
    ManyToOne(x => x.Status, map => { map.Column("StatusId"); }); 
    Property(x => x.Date); 
} 

삭제 (상태) 결과 :

UPDATE 
    CommentStatus 
SET 
    StatusId = null 
WHERE 
    StatusId = @p0; 
@p0 = ce350d55-e476-4874-9e95-341cad9342e2 [Type: Guid (0)] 


UPDATE 
    StatusLike 
SET 
    StatusId = null 
WHERE 
    StatusId = @p0; 
@p0 = ce350d55-e476-4874-9e95-341cad9342e2 [Type: Guid (0)] 


DELETE 
FROM 
    Status 
WHERE 
    Id = @p0; 
@p0 = ce350d55-e476-4874-9e95-341cad9342e2 [Type: Guid (0)] 

어떤 생각? 도와주세요, 제발 !

편집 :

나는 예외가 작동 이하 및 변경했으나이 방법은 삭제 명령을 발사 데이터베이스입니다.

nhibernate가 데이터베이스 대신 삭제를 실행하도록하려면 어떻게해야합니까?

Bag(p => p.Likes, map => 
{ 
    map.Key(k => 
    { 
     k.Column("StatusId"); 
     k.OnDelete(OnDeleteAction.Cascade); 
    }); 
    map.Cascade(Cascade.DeleteOrphans); 
    map.Inverse(true); 
}, ce => ce.OneToMany()); 

답변

1

Cascade.DeleteOrphans는 고아가 삭제된다고 말합니다. 부모가 삭제되면 자식도 삭제됨을 의미하지는 않습니다.

당신은뿐만 아니라 "모든"단계적으로 "제거"또는해야

map.Cascade(Cascade.All | Cascade.DeleteOrphans)