我有一个类,它有一个抽象类的列表:
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
时,它不会删除孤儿,但它会将条形Foo_id
列设置为NULL
}?
我阅读并看到答案说要反转HasMany
,所以我尝试了:
HasMany(f => f.Bars)
.Inverse()
.Cascade.AllDeleteOrphans();
但是当保存Bar
时NULL
始终为Foo_id
。当我尝试添加KeyColumn
:
HasMany(f => f.Bars)
.Inverse()
.KeyColumn("Foo_id")
.Cascade.AllDeleteOrphans();
答案 0 :(得分:0)
使用这些映射:
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);
}
}
要删除,您需要从两个方面取消与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);