2

我有文档扫描系统,其中扫描几种类型的文档。最初,文档在扫描时没有任何信息,那么它们会被分类并在稍后的第二步中为它们输入附加信息。所以,我有一个名为Document的基类,以及每个类型的子类以及它们各自的元数据,如下所示。我把它设置为NHibernate中的每个子类(连接子类)映射。你可以从基类更改为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?如果我尽可能保留原始文件记录,但是如果我必须抛弃它,它不是一个破坏者。

回答

3

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

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

此问题已被讨论here。我会和Terry Wilcox的小窍门一起使用这个角色。继承的构成。

+0

很好的例子;错过了那篇文章+1 – DanP 2010-09-20 22:39:31

相关问题