我正在尝试映射几个表,其中 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 = null
和Bar.Foo = null
删除 Bar 的实例时,记录不会从数据库中删除。
我想念什么?
答案 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();
}
}