你能在nhibernate中从基类改为连接的子类吗?

时间:2010-09-20 20:17:00

标签: nhibernate inheritance nhibernate-mapping table-per-class

我有文档扫描系统,扫描几种类型的文档。最初,文档在扫描时没有信息,然后它们被分类,并在稍后的第二步中为它们输入附加信息。所以,我有一个名为Document的基类,每个类型的子类及其各自的元数据如下所示。我把它设置为NHibernate中的每子类表(连接子类)映射。

public class Document
{
   public int ID { get; set; }
   public string FilePath { get; set; }
}

public class Certificate : Document
{
   // certificate-specific fields
}

public class Correspondence : Document
{
   // correspondence-specific fields
}

我需要做的是首先创建一个Document类并保存它。然后在第二步中检索并将其转换为其中一个子类类型并填写其余信息。这样做的最佳方法是什么,这对NHibernate来说是否可能?如果可能的话我想保留原始文件记录,但如果我不得不放弃它,它不是一个破坏者。

2 个答案:

答案 0 :(得分:3)

不幸的是,NHibernate不允许在初始创建后在子类之间切换;要按照您想要的方式工作,您有3个选择:

  1. 使用本机sql调用来更改鉴别器(并可能)添加或更改任何与子类相关的字段。
  2. 将对象的内容复制到正确类的新对象,然后删除原始对象。
  3. 不要使用子类,通过枚举或其他允许您在运行时确定其类型的机制来控制对象的状态。

答案 1 :(得分:2)

此问题已经讨论过here。我会跟Terry Wilcox的小费一起使用这个角色。构成而不是继承。