2

我有文档扫描系统,可以扫描多种类型的文档。最初,文档在扫描时没有任何信息,然后它们被分类并在稍后的第二步中为它们输入附加信息。因此,我有一个名为 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 甚至可以做到这一点吗?如果可能的话,我想保留原始文件记录,但如果我不得不放弃它,它不会破坏交易。

4

2 回答 2

3

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

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

这个问题已经在这里讨论过了。我会按照 Terry Wilcox 的提示使用角色。组合优于继承。

于 2010-09-20T20:55:23.703 回答