删除一对零或一个子记录不起作用

时间:2019-06-26 10:06:45

标签: nhibernate orm fluent-nhibernate

我正在尝试映射几个表,其中 Bar 中的主键是 Foo 的外键,即1..0:1的关系。 / p>

我的映射如下:

class FooMapping : ClassMap<Foo>
{
    public FooMapping()
    {
        Table("Foo");

        Id(x => x.Id).Column("ID");

        HasOne(x => x.Bar).Cascade.All();
    }
}

class BarMapping : ClassMap<Bar>
{
    public BarMapping()
    {
        Table("Bar");

        Id(x => x.FooId).GeneratedBy.Foreign("Foo");

        HasOne(x => x.Foo).Constrained();
    }
}

问题是,当我尝试通过设置Foo.Bar = nullBar.Foo = null删除 Bar 的实例时,记录不会从数据库中删除。

我想念什么?

2 个答案:

答案 0 :(得分:0)

所以从根本上讲,问题在于您在Cascade.All()的映射中使用Foo。 相反,您应该使用Cascade.AllDeleteOrphan()

级联所有

保存/更新/删除对象时,请检查关联并保存/更新/删除所有找到的对象。

Cascade.AllDeleteOrphan

保存/更新/删除对象时,请检查关联并保存/更新/删除找到的所有对象。除此之外,当一个对象从关联中删除并且不与另一个对象(孤立)关联时,也将其删除。

答案 1 :(得分:0)

通过使用HasMany和Cascade.AllDeleteOrphan建立这种关系,还有其他肮脏的解决方案。

class FooMapping : ClassMap<Foo>
{
    public FooMapping()
    {
       Table("Foo");
       Id(x => x.Id).Column("ID");
       HasMany(x => x.Bar).KeyColumn("FooId").Cascade.AllDeleteOrphan();
    }
}