使用NHibernate在没有鉴别器的情况下为每个类层次结构持久化一个表?

使用NHibernate在没有鉴别器的情况下为每个类层次结构持久化一个表?,nhibernate,interface,nhibernate-mapping,table-per-hierarchy,discriminator,Nhibernate,Interface,Nhibernate Mapping,Table Per Hierarchy,Discriminator,我有一个接口和一个实现这个接口的类 public interface IPhase { string Description { get; set; } int Id { get; } string Phase { get; set; } } public class Phase : IPhase { // Implementation here... } 现在,使用NHibernate2.1.2.GA,我希望使用每个类层次结构的表来映射接口及其实现者,实际上

我有一个接口和一个实现这个接口的类

public interface IPhase {
    string Description { get; set; }
    int Id { get; }
    string Phase { get; set; }
}

public class Phase : IPhase {
    // Implementation here...
}
现在,使用NHibernate2.1.2.GA,我希望使用每个类层次结构的表来映射接口及其实现者,实际上,我不需要鉴别器,因为这个实现者将是这个表中唯一的类。我已经有一年半没有用过NHibernate了,现在我的记忆有些空白

我已经阅读了这个相关的问题和答案,除了我没有使用FNH。

  • 我想知道
    discriminator
    属性在使用
    子类时是否是必需的

  • 在此特定上下文中,我的XML映射应该是什么样子


  • 谢谢你的帮助

    当然,NHibernate需要一个用于表/类层次结构映射的鉴别器,否则在从数据库获取行时,它应该如何识别不同的子类

    如果接口只有一个实现,为什么要映射它?只需将类映射为普通实体(无继承)


    编辑:忘记映射中可能有对接口的引用。在这种情况下,您可以尝试使用
    abstract=“true”
    标记基类(接口)的表/具体类映射,如这里所述:

    当然,NHibernate需要一个用于表/类层次结构映射的鉴别器,否则从数据库获取行时,它应该如何识别不同的子类

    如果接口只有一个实现,为什么要映射它?只需将类映射为普通实体(无继承)


    编辑:忘记映射中可能有对接口的引用。在这种情况下,您可以尝试使用
    abstract=“true”
    标记基类(接口)的每个具体类的表映射,如这里所述:

    +1我认为如果使用
    每个具体类的表
    策略,这将大大简化数据持久性。感谢您抽出时间回答我的问题。=)+1我认为如果使用每个具体类的
    策略,这将大大简化数据持久性。感谢您抽出时间回答我的问题。=)