首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当多对一空时,NHibernate组件加载为空,尽管有一些非空属性。

当多对一空时,NHibernate组件加载为空,尽管有一些非空属性。
EN

Stack Overflow用户
提问于 2012-07-19 10:42:42
回答 1查看 2.1K关注 0票数 0

我了解到,当映射的组件的所有属性在数据库中为空时,NHibernate将该组件设置为null。但是,在下面的情况下,如果多对一项LevelOfInvolvement为空,则组件将被设置为空,尽管组件的所有其他属性都是而不是空。

无论其他字段的值如何,更改数据库中LevelOfInvolvement列的值都会导致组件为空或不为空。

这是地图的全部内容:

代码语言:javascript
复制
<?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>

加载实体的代码很简单:

代码语言:javascript
复制
entity = NHibernateSession.Load(persitentType, id);

我使用的是NHibernate版本3.3.1

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-19 22:14:05

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

代码语言:javascript
复制
<many-to-one 
    name="LevelOfInvolvement" 
    column="InvolvementChecklist_LevelOfInvolvementID" 
    not-null="false" />
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11559097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档