1

У меня есть две таблицы:NHibernate один-к-одному с Ассоциацией иностранных Ки

TableA : 
    Id (identity) 
    IdTableB(Foreign Key) Nullable 
    ... 

TableB : 
    Id (identity) 
    ... 

Я сделал это отображение:

ClassA (TABLEA)

... 
m.ManyToOne<ClassB>(x => x.ClassB, map => 
{ 
    map.Column("IdTableB"); 
    map.Cascade(Cascade.All); 
    map.Unique(true); 
}); 
... 

ClassB (TableB)

... 
m.OneToOne<ClassA>(x => x.ClassA, map => 
{ 
    map.PropertyReference(x => x.ClassB); 
    map.Constrained(false); 
}); 
... 

Хорошо, отображение отлично, а select/save работает нормально.

Теперь я хочу, чтобы удалить ClassB из объекта CLASSA, как это:

ClassA classA = session.Load(1); 
classA.ClassB = null; 
session.commit(); 

Это обновление де TABLEA с нулем на IdTableB, но не удалить ClassB из TableB.

Во-первых, это мое сопоставление? Есть ли лучшее решение?

Во-вторых, как я могу удалить объект ClassB, когда я удаляю исключение из отношения?

Благодаря

ответ

1

Как пытались объяснить здесь: NHibernate Many-to-one cascade,

Many-to-one не поддерживает каскад all-delete-orphan. И этот тип настройки может удалить объект, на который больше не ссылаются ...

Другие слова, сделанные many-to-one ссылка null - не будет инициировать удаление.

Итак, отображение в порядке, но функциональность, требуемая выше, не на месте. Решение заключалось бы в явном исключении ссылки session.Delete(classA.ClassB) ...

Смежные вопросы