代码之家  ›  专栏  ›  技术社区  ›  Richard Bramley

N尽管有几个非null属性,但当多对一为null时,将组件加载为null

  •  0
  • Richard Bramley  · 技术社区  · 12 年前

    我知道,当数据库中映射组件的所有属性都为null时,NHibernate会将该组件设置为null。但是,在以下情况下,如果多对一项 参与程度 为null,尽管该组件的所有其他属性都为 无效的

    更改的值 参与程度 列将导致该组件是否为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

    这似乎是一个相对简单的映射,但我找不到任何其他有类似问题的参考。

    1 回复  |  直到 12 年前
        1
  •  3
  •   Phil Degenhardt    12 年前

    除了在所有组件成员都为null的情况下返回null之外,我相信NHibernate还会将组件视为null,如果 任何 不可为null的成员为null。默认情况下 <many-to-one> 映射创建了一个不可为null的成员,我认为这会导致您看到的行为。尝试更改 LevelOfInvolement 映射以允许null:

    <many-to-one 
        name="LevelOfInvolvement" 
        column="InvolvementChecklist_LevelOfInvolvementID" 
        not-null="false" />