【问题标题】:Can you change from a base class to a joined subclass type in nhibernate?您可以在 nhibernate 中从基类更改为连接的子类类型吗?
【发布时间】:2011-04-14 21:14:23
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 很好的例子;错过了那篇文章 +1
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      相关资源
      最近更新 更多