我有两张桌子:
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);
});
...
好的,映射很好,选择/保存工作正常。
现在我想从ClassA对象中删除ClassB,如下所示:
ClassA classA = session.Load(1);
classA.ClassB = null;
session.commit();
更新de tableA在IdTableB上为null,但它不会从tableB中删除ClassB。
首先,我的映射是否合适?有更好的解决方案吗?
其次,当我从关系中明确删除时,如何删除该ClassB对象?
由于
答案 0 :(得分:1)
试图在此解释:NHibernate Many-to-one cascade,
Many-to-one
不支持级联all-delete-orphan
。这种设置能够删除实体,不再被引用......
换句话说,使many-to-one
引用为null - 不会触发删除。
因此,映射是可以的,但上面所需的功能不到位。解决方案是明确删除引用 session.Delete(classA.ClassB)
...