NHibernate与外键关联一对一映射

时间:2014-12-11 20:40:26

标签: nhibernate nhibernate-mapping fluent-nhibernate-mapping

我有两张桌子:

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对象?

由于

1 个答案:

答案 0 :(得分:1)

试图在此解释:NHibernate Many-to-one cascade

  

Many-to-one不支持级联 all-delete-orphan 。这种设置能够删除实体,不再被引用......

换句话说,使many-to-one引用为null - 不会触发删除。

因此,映射是可以的,但上面所需的功能不到位。解决方案是明确删除引用 session.Delete(classA.ClassB) ...