我有一种情况,我每个子类使用一个表进行关联。在我尝试从子类表中删除记录之前,映射是正常的。删除原因不仅是要删除的子类,还包括父类。我可以理解这个功能可能是设计的,但无论如何只是删除子类?
这是我的示例代码。
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);
我只想删除子对象,这可能吗?
答案 0 :(得分:4)
不,这是不可能的。
用OOP术语来思考:如果你有一个继承自Dog
的类Animal
的对象,那么“删除狗,但留下动物”是否有意义?
这让我想到了下一点:如果你可以删除一个对象的“部分”,那么你应该不使用一个子类,而是一个关联(可能是一对一或多个-to酮)