【问题标题】:NHibernate - mapping classes that implement multiple interfacesNHibernate - 实现多个接口的映射类
【发布时间】:2015-05-14 05:23:36
【问题描述】:

我正在使用 Table Per Subclass 策略来保持继承层次结构:


alt text http://dl.dropbox.com/u/1563210/budget%20obj%20graph.jpg
对于如何映射实现 2 个接口的 Debit 类,我遇到了一些困惑。我可能想多了;我还在学习NH。

感谢您的任何意见。

编辑

让我感到困惑的是,我的具体类的唯一属性是从这些接口中获取的。这就是为什么我认为我必须将接口与具体类一起映射。

【问题讨论】:

    标签: c# .net nhibernate orm


    【解决方案1】:

    NHibernate 不知道也不关心接口。例如,您不能使用 NHibernate 来查询实现特定接口的对象。您有一个每类表的映射,因此您应该将其与子类声明映射为described in the documentation

    【讨论】:

    • 我不确定这适用于哪个版本的 NHibernate,但现在可以查询实现接口的对象。
    【解决方案2】:

    我自己对 NHibernate 很陌生,但我做过类似的事情,所以希望如果我按照正确的思路发布一些内容,这会给我们一个开始,以便您可以发表评论,并且本着 stackoverflow 的精神,也许有人可以编辑我的答案。

    我认为基本上 hbm 需要使用“subclass”、“joined-subclass”或“union-subclass”来实现你正在寻找的东西。

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                       assembly="YourAssembly.Bll"
                       namespace="YourAssembly.Bll.Domain">
      <class name="Transaction" table="Transaction">
        <id name="Id">
          <generator class="native"/>
        </id>
        <property name="Amount" not-null="true" />
        <property name="Currency"/>
    
        <joined-subclass name="Debit" table="DebitTransaction">
          <key column="TransactionId"/>
          <property name="CardHolderName" not-null="true" />
        </joined-subclass>
    
      </class>
    </hibernate-mapping>
    

    Hibernate docs on inheritance 非常有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多