【问题标题】:Implement nhibernate. Class + abstract base class实现休眠。类+抽象基类
【发布时间】:2011-10-10 11:00:37
【问题描述】:

我有以下数据库设置:

我需要一个将其映射到的休眠文件:

  • PowerPrognosisUsageSubmission
  • PowerPrognosisWindSubmission
  • PowerPrognosisSubmissionBase抽象基类

虽然,我无处可去。这是我的尝试:

我尝试实现PowerPrognosisUsageSubmission

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping namespace="DC.Client.Models.Model" assembly="DC.Client.Models" xmlns="urn:nhibernate-mapping-2.2">
  <class name="PowerPrognosisUsageSubmission" table="PowerPrognosisSubmissionBase" schema="`dbo`" mutable="true" lazy="false">
    <id name="PowerPrognosisSubmissionId" access="property" column="`PowerPrognosisSubmissionBaseID`">
      <generator class="native" />
    </id>
    <property name="Date" column="`Date`" />
    <property name="Hour" column="`Hour`" />
    <property name="Direction" column="`Direction`" />
    <property name="Submission" column="`Submission`" />
    <property name="Basis" column="`Basis`" />
    <many-to-one name="PowerPrognosisUsageArea" class="PowerPrognosisUsageArea" column="`PowerPrognosisAreaBaseID`" not-null="false" lazy="false" />
    <joined-subclass name="PowerPrognosisUsageSubmission" table="PowerPrognosisUsageSubmission">
      <key column="`Usage`" />
    </joined-subclass>
  </class>
</hibernate-mapping>

有什么帮助吗?

【问题讨论】:

    标签: c# sql nhibernate


    【解决方案1】:

    我自己解决了

    <?xml version="1.0" encoding="utf-8"?>
    <hibernate-mapping namespace="DC.Client.Models.Model" assembly="DC.Client.Models" xmlns="urn:nhibernate-mapping-2.2">
      <class name="PowerPrognosisSubmissionBase" table="PowerPrognosisSubmissionBase" schema="`dbo`" mutable="true" lazy="false">
        <id name="PowerPrognosisSubmissionId" access="property" column="`PowerPrognosisSubmissionBaseID`">
          <generator class="native" />
        </id>
        <property name="Date" column="`Date`" />
        <property name="Hour" column="`Hour`" />
        <property name="Direction" column="`Direction`" />
        <property name="Submission" column="`Submission`" />
        <property name="Basis" column="`Basis`" />
        <many-to-one name="PowerPrognosisAreaUsage" class="PowerPrognosisAreaUsage" column="`PowerPrognosisAreaBaseID`" not-null="false" lazy="false" />
        <joined-subclass name="PowerPrognosisSubmissionUsage" table="PowerPrognosisSubmissionUsage">
          <key column="`PowerPrognosisSubmissionBaseID`" />
          <property name="Usage" column="`Usage`" />
        </joined-subclass>
        <joined-subclass name="PowerPrognosisSubmissionWind" table="PowerPrognosisSubmissionWind">
          <key column="`PowerPrognosisSubmissionBaseID`" />
          <property name="PriceAreaEffect" column="`PriceAreaEffect`" />
          <property name="ResponsibleEffect" column="`ResponsibleEffect`" />
          <property name="W2UShare" column="`W2UShare`" />
          <property name="PointCarbonShare" column="`PointCarbonShare`" />
        </joined-subclass>
      </class>
    </hibernate-mapping>
    

    【讨论】:

      【解决方案2】:

      我建议你看看 FluentNhibernate,在我看来,它提供了一种更好的方法来将表映射到你的实体类。

      另外,您可能想试试这个工具,它能够为您生成 hbm.xml 或 fluentnhibernate 映射文件。

      http://nmg.codeplex.com/

      【讨论】:

      • 抱歉,我无法更改我们使用的 nhibernate 类型。我只是一个在项目上工作的团队成员。我试试看工具
      • 你可以在一个单独的项目中使用 FluentNHibernate 并让它为你吐出映射(即作弊;)
      • 如果您无法更改映射类型,那么我强烈建议您试一试 nhibernate 映射生成器。只需将其指向您的表并选择您当前使用的映射类型,它就会自动为您生成所有 xml/映射类。
      【解决方案3】:

      也许您应该阅读NHibernate manualChapter 8 有继承的所有细节。

      【讨论】:

      • 是的。在制作上述示例时,我正在查看它。但据我所知,它可以帮助您实现一个继承子类属性的超类。但我想要反对。不过我会再看看
      • 没有。我只是说不好。我的意思是,他们的例子似乎创造了:付款继承支票付款,但我想要反对。使用他们的例子
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多