0

マップされたコンポーネントのすべてのプロパティがデータベースでnullの場合、NHibernateはコンポーネントをnullに設定することを理解しています。ただし、次の場合、コンポーネントの他のすべてのプロパティがnullではないにもかかわらず、多対1のアイテムLevelOfInvolvementがnullの場合、コンポーネントはnullに設定されます。

データベースのLevelOfInvolvement列の値を変更すると、他のフィールドの値に関係なく、コンポーネントがnullになるかどうかが決まります。

完全なマッピングは次のとおりです。

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="NHS.WebTeam.LPTInvolvementHub.Activity, NHS.WebTeam.LPTInvolvementHub" table="[Activity]" lazy="false" optimistic-lock="version" where="Deleted=0" >
    <id name="ID" type="Int32" column="ID" unsaved-value="0">
      <generator class="hilo">
        <param name="table">NHibernateHiLo</param>
        <param name="column">NextValue</param>
        <param name="max_lo">100</param>
      </generator>
    </id>

    <version name="Version"/>
    <property name="Deleted" />
    <property name="LastUpdateBy" />
    <property name="LastUpdateDate" />

    <many-to-one name="Service" column="ServiceID"></many-to-one>
    <property name="Title"></property>
    <property name="Abstract"></property>
    <property name="ProposedDate"></property>
    <property name="DueDate"></property>
    <property name="ActualDate"></property>
    <property name="Rationale"></property>
    <many-to-one name="PreAssessment" column="PreAssessmentID"></many-to-one>
    <many-to-one name="PostAssessment" column="PostAssessmentID"></many-to-one>

    <component name="InvolvementChecklist">
      <property name="Impact" column="InvolvementChecklist_Impact"></property>
      <property name="RewardsAndRecognition" column="InvolvementChecklist_RewardsAndRecognition"></property>
      <property name="Training" column="InvolvementChecklist_Training"></property>
      <property name="LogisticalIssues" column="InvolvementChecklist_LogisticalIssues"></property>
      <property name="Feedback" column="InvolvementChecklist_Feedback"></property>
      <property name="DueRegard" column="InvolvementChecklist_DueRegard"></property>
      <property name="SupportRequiredFromTheTeam" column="InvolvementChecklist_SupportRequiredFromTheTeam"></property>
      <property name="QualityAssurance" column="InvolvementChecklist_QualityAssurance"></property>
      <property name="NonComplianceReason" column="InvolvementChecklist_NonComplianceReason"></property>
      <many-to-one name="LevelOfInvolvement" column="InvolvementChecklist_LevelOfInvolvementID"></many-to-one>
    </component>

  </class>
</hibernate-mapping>

エンティティをロードするコードは次のとおりです。

entity = NHibernateSession.Load(persitentType, id);

NHibernateバージョン3.3.1を使用しています

これは比較的単純なマッピングのようですが、同様の問題を抱えている他の人への参照を見つけることができません。

4

1 に答える 1

3

すべてのコンポーネントメンバーがnullの場合はnullを返すだけでなく、null不可能なメンバーがnullの場合、NHibernateはコンポーネントをnullとして扱うと思います。デフォルトでは、<many-to-one>マッピングによってnull許容でないメンバーが作成されます。これにより、表示されている動作が発生すると思います。LevelOfInvolementnullを許可するようにマッピングを変更してみてください。

<many-to-one 
    name="LevelOfInvolvement" 
    column="InvolvementChecklist_LevelOfInvolvementID" 
    not-null="false" />
于 2012-07-19T22:14:05.917 に答える