我有文档扫描系统,其中扫描了几种类型的文档。最初,该文档在扫描时没有信息,然后将其分类并在第二步中为其输入其他信息。因此,我有一个名为文档的基类,每种类型的子类带有各自的元数据,如下所示。我将其设置为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
}

我需要做的就是首先创建文档类并保存它。然后在第二个步骤中检索并将其转换为一个子类类型之一,并填写其余信息。最好的做法是什么,这甚至可以使用NHIBERNATE?如果我想保留原始的文档记录,但如果我必须抛弃它,那不是一个破坏交易的记录。

有帮助吗?

解决方案

不幸的是,NHIBERNATE不允许您在初始创建后在子类之间切换。为了按照您想要的方式进行此操作,您有3个选项:

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

其他提示

这个问题已经讨论 这里. 。我会选择特里·威尔科克斯(Terry Wilcox)的技巧来为此使用角色。关于继承的组成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top