尽管有几个非null属性,但当多对一为null时,NHibernate组件加载为null
我知道当数据库中映射组件的所有属性都为null时,NHibernate会将该组件设置为null。但是,在以下情况下,如果多对一项目级别的参与为null,则组件将被设置为null,尽管组件的所有其他属性都而不是null 更改数据库中LevelOfInvolvement列的值将导致组件为空或不为空,而与其他字段的值无关 以下是完整的映射:尽管有几个非null属性,但当多对一为null时,NHibernate组件加载为null,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我知道当数据库中映射组件的所有属性都为null时,NHibernate会将该组件设置为null。但是,在以下情况下,如果多对一项目级别的参与为null,则组件将被设置为null,尽管组件的所有其他属性都而不是null 更改数据库中LevelOfInvolvement列的值将导致组件为空或不为空,而与其他字段的值无关 以下是完整的映射: <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nh
<?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>
我使用的是NHibernate版本3.3.1
这似乎是一个相对简单的映射,但我找不到有类似问题的其他组件的任何引用。除了在所有组件成员都为null时返回null之外,我相信如果任何不可为null的成员为null,NHibernate也会将组件视为null。默认情况下,
映射会创建一个不可为空的成员,我认为这会导致您看到的行为。尝试更改levelofinventment
映射以允许空值:
<many-to-one
name="LevelOfInvolvement"
column="InvolvementChecklist_LevelOfInvolvementID"
not-null="false" />
除了在所有组件成员都为null时返回null之外,我相信如果任何不可为null的成员为null,NHibernate也会将组件视为null。默认情况下,
映射会创建一个不可为空的成员,我认为这会导致您看到的行为。尝试更改levelofinventment
映射以允许空值:
<many-to-one
name="LevelOfInvolvement"
column="InvolvementChecklist_LevelOfInvolvementID"
not-null="false" />
您是否有nhibernate分析器来查看已翻译的SQL以测试其返回的内容?我没有nhibernate分析器,但可以通过Log4Net获取SQL。运行查询将返回组件的预期值。您是否有nhibernate探查器来查看转换后的SQL以测试其返回的内容?我没有nhibernate探查器,但可以通过Log4Net获取SQL。运行查询将返回组件的预期值。