nHiberbate: таблица на иерархию - проблема SchemaExport

Я использую nhibernate для сопоставления следующих классов:

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 генерируются как не пустые.

Что-то я делаю не так? Как я могу создать эти столбцы как допускающие значение NULL?

Спасибо,

Павел


person Paul    schedule 02.06.2011    source источник


Ответы (1)


Вы установили столбцы в сопоставлении как ненулевые:

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

Удалите атрибуты not-null.

person Graham    schedule 02.06.2011
comment
но они не равны нулю в случае подклассов ... Мне просто изменить это? Я как бы хотел, чтобы отображение отражало область - person Paul; 02.06.2011
comment
Поразмыслив, последний комментарий не имеет смысла. Отображение явно относится к базе данных, а не к домену ... Я просто установлю в сопоставлении значение NULL. Ваше здоровье! - person Paul; 02.06.2011