首页 > 解决方案 > 删除一对零或一个子记录不起作用

问题描述

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

我的映射如下所示:

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

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

我错过了什么?

标签: nhibernateormfluent-nhibernate

解决方案


通过使用 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();
    }
}

推荐阅读