繁体   English   中英

NHibernate不会在更新时删除孤儿

[英]NHibernate not deleting orphans on update

我有一个类,其中包含一个抽象类的列表:

public class Foo
{
    public int Id { get; set; }
    public IList<Bar> Bars { get; set; }
}

public abstract class Bar
{
    public int Id { get; set; }
}

我已经绘制了这样的酒吧:

HasMany(f => f.Bars).Cascade.AllDeleteOrphans();

但是,当我更新Foo以删除Bar它不会删除孤立对象,但会将Bar的Foo_id列设置为NULL

我四处阅读,看到答案说要逆转HasMany所以我尝试了:

HasMany(f => f.Bars)
    .Inverse()
    .Cascade.AllDeleteOrphans();

但是然后在保存Bar时,其Foo_id始终为NULL 当我尝试添加KeyColumn时也是如此:

HasMany(f => f.Bars)
    .Inverse()
    .KeyColumn("Foo_id")
    .Cascade.AllDeleteOrphans();

使用这些映射:

public class FooMap : ClassMap<Foo>
{
    public FooMap ()
    {
        Id(x => x.Id);
        HasMany(f => f.Bars).Inverse().Cascade.AllDeleteOrphans();
    }
}
public class BarMap : ClassMap<Bar>
{
    public BarMap ()
    {
        Id(x => x.Id);
        References(x => x.Foo);
    }
}

要删除,您需要通过两种方式将bar与foo解除关联:

// get foo object
var foo = dao.GetFooByID(1);

var barToRemove = foo.Bars[0]; // find the first bar

// disassociate the objects to properly trigger cascade deletion
barToRemove.Foo = null;
foo.Bars.Remove(barToRemove);

dao.SaveFoo(foo);

另一方面,要添加,还需要同时通过两种方式关联对象:

// get foo object
var foo = dao.GetFooByID(1);

var barToAdd = new Bar(); // new bar to add

// associate the objects to properly trigger cascade save
barToAdd.Foo = foo;
foo.Bars.Add(barToAdd);

dao.SaveFoo(foo);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM