1

У меня есть следующее отображение, но когда я удаляю объект статуса, Nhibernate выполняет обновление для дочернего элемента вместо удаления.Nhibernate 3.x Cascade - Выполнение обновления

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); 
} 

Удалять (статус) Результаты в этом SQL:

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)] 

Любая идея ?? Помоги мне, пожалуйста !

Edit:

Я сделал изменения ниже и исключения работает, но это способ, это база данных, который запускает команду удаления.

Как я могу заставить 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)