您可以从基类更改为NHIBERNATE的连接子类型吗?
-
04-10-2019 - |
题
我有文档扫描系统,其中扫描了几种类型的文档。最初,该文档在扫描时没有信息,然后将其分类并在第二步中为其输入其他信息。因此,我有一个名为文档的基类,每种类型的子类带有各自的元数据,如下所示。我将其设置为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个选项:
- 使用本机SQL调用来更改鉴别器(甚至可能)添加或更改任何与子类相关的字段。
- 将对象的内容复制到适当类的新对象,然后删除原始对象。
- 不要使用子类,而是通过枚举或其他一些机制来控制对象的状态,这些机制使您可以在运行时确定其类型。
其他提示
这个问题已经讨论 这里. 。我会选择特里·威尔科克斯(Terry Wilcox)的技巧来为此使用角色。关于继承的组成。
不隶属于 StackOverflow