删除子类,也删除父类

时间:2010-12-04 10:44:03

标签: nhibernate fluent-nhibernate

我有一种情况,我每个子类使用一个表进行关联。在我尝试从子类表中删除记录之前,映射是正常的。删除原因不仅是要删除的子类,还包括父类。我可以理解这个功能可能是设计的,但无论如何只是删除子类?

这是我的示例代码。


public class ParentClassMap : ClassMap<Parent>
{
    public ParentClassMap ()
    {
        Table("tblParent");
        Id(x => x.ParentId).Column("ParentId").GeneratedBy.Identity()
        ... other properties
    }
}

public class ChildClassMap : SubClassMap<Child>
{
    public ChildClassMap()
    {
        Table("tblChild");
        KeyColumn("ParentId");
        ... other properties
    }
}

现在当我查询记录时,一切似乎都很好


Child child = session.CreateCriteria<Parent>().Add(Restrictions.Eq("ParentId", 1)).UniqueResult<Parent>();

但是当我删除子进程时,执行的sql包括对引用Parent或Child的所有表的更新,然后删除Child然后删除Parent。


session.Delete(child);

我只想删除子对象,这可能吗?

1 个答案:

答案 0 :(得分:4)

不,这是不可能的。

用OOP术语来思考:如果你有一个继承自Dog的类Animal的对象,那么“删除狗,但留下动物”是否有意义?

这让我想到了下一点:如果你可以删除一个对象的“部分”,那么你应该使用一个子类,而是一个关联(可能是一对一或多个-to酮)