nhibernate子类 - 未使用列而不是null的零guid

时间:2013-10-16 12:47:38

标签: c# nhibernate mapping subclass hbm

我遇到了使用相同表和相同字段的两个子类的问题。即使生成的表将此字段作为可空的唯一标识符,当我保存不使用第三列的一条记录时,创建的字段的值为“000000000-0000-0000-0000-000000000000”而不是NULL。应用程序的其他部分要求此位置为null。这是代码。怎么了?

   <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                       assembly=".."
                       namespace="...">
      <class name="TEST" table="..." discriminator-value="not null">
        <id name="Id" column="tID">
          <generator class="assigned" />
        </id>
        <discriminator column="iTestTypeID" type="Int32" not-null="true"/>

        <property name="TotalScore" column="fTotalScore"/>
        <property name="IsTimedOut" column="bTimedOut"/>
    </hibernate-mapping>


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly=".."
                   namespace="...">
  <subclass name="TestA" extends="TEST" discriminator-value="3">
    <many-to-one name="Department" column="uTestCriteria01" cascade="save-update" not-null="false" />
    <many-to-one name="Building" column="uTestCriteria02" cascade="save-update" not-null="false" />
  </subclass>
</hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly=".."
                   namespace="...">
  <subclass name="TestB" extends="TEST" discriminator-value="3">
    <many-to-one name="Building" column="uTestCriteria01" cascade="save-update" not-null="false" />
    <many-to-one name="Floor" column="uTestCriteria02" cascade="save-update" not-null="false" />
    <many-to-one name="Room" column="uTestCriteria03" cascade="save-update" not-null="false" />
  </subclass>
</hibernate-mapping>

1 个答案:

答案 0 :(得分:1)

我的猜测是你的对象没有使用可空类型。

您是否具有如下定义的类型:

public class A
{
    public Guid? field { get; set; }
}

请看一下StackOverflow文章的解释:
How can I default a parameter to Guid.Empty in C#?

同样在您的问题中,我会列出您正在讨论的特定字段,因此不会产生混淆,并发布与此映射关联的对象的代码。