2011-06-02 15 views
0

我使用NHibernate的映射以下類:nHiberbate:每一個分層表 - 的SchemaExport問題

public class DeviceConfig : EntityBase 
{ 
    public virtual string Name 
    { 
     get { return m_Name; } 
     set { SetValue(ref m_Name, value); } 
    } 
    public virtual string Description 
    { 
     get { return m_Description; } 
     set { SetValue(ref m_Description, EmptyStringIfValueNull(value)); } 
    } 
} 

public class DeviceConfigEmail : DeviceConfig 
{ 
    public virtual string SmtpServer 
    { 
     get { return m_SmtpServer; } 
     set { SetValue(ref m_SmtpServer, EmptyStringIfValueNull(value)); } 
    } 
} 

public class DeviceConfigSMS : DeviceConfig 
{ 
    public virtual string SmsServer 
    { 
     get { return m_SmsServer; } 
     set { SetValue(ref m_SmsServer, EmptyStringIfValueNull(value)); } 
    } 

} 

用下面的映射文件:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="field.pascalcase-m-underscore"> 
    <class name="MyNamespace.DeviceConfig, MyNamespace" table="DeviceConfig" lazy="false"> 
     <id name="ID" access="property" column="DeviceConfigID" unsaved-value="-1"> 
     <generator class="identity" /> 
    </id> 

    <discriminator column="Discriminator"/> 

    <version name="Version" column="Version"/> 

    <property name="Name" not-null="true"/> 
    <property name="Description" not-null="true"/> 


    <subclass name="MyNamespace.DeviceConfigEmail, MyNamespace" discriminator-value="Email" lazy="false"> 
     <property name="SmtpServer" not-null="true" /> 
    </subclass> 

    <subclass name="MyNamespace.DeviceConfigSMS, MyNamespace" discriminator-value="SMS" lazy="false"> 
     <property name="SmsServer" not-null="true" /> 
    </subclass> 

    </class> 
</hibernate-mapping> 

我做的每一個分層數據建模表一個表格如下:

table: DeviceConfig 
- DeviceConfigID (PK, int, not null) 
- Discriminator (varchar(20), not null) 
- Name (varchar(50), not null) 
- Description (varchar(200), not null) 
- SmtpServer (varchar(30), null) 
- SmsServer (varchar(30), null) 

這一切都很好,並且對我的SQL數據庫有效。

我現在想做一個SchemaExport來做一些針對Sqlite的內存測試。當我使用模式導出生成此表時,SmtpServer和SmsServer列將生成爲非空

有什麼我做錯了嗎?我怎樣才能讓這些列生成爲空?

感謝,

保羅

回答

0

你已經設置的列在映射NOT NULL:

<property name="SmtpServer" not-null="true" /> 
.... 
<property name="SmsServer" not-null="true" /> 

取出not-null屬性。

+0

但是,它們在子類的情況下不是null ...我應該改變它嗎?我有點想映射反映域 – Paul 2011-06-02 08:18:36

+0

在第二個想法 - 最後的評論沒有任何意義 - 映射顯然是關於數據庫,而不是域...我會在映射中設置爲空。乾杯! – Paul 2011-06-02 08:19:52