NHibernate: неправильный оператор вставки для объединенного подкласса и Sql Compact 4 - PullRequest
0 голосов
/ 23 мая 2011

Я сопоставил иерархию классов, используя таблицу для каждого подкласса, и она работает с Sql Server 2005.

Однако, когда я пытаюсь использовать это же сопоставление с базой данных Sql Compact 4.0, сгенерированный оператор вставкине работает, потому что он не содержит ни одного столбца или значения.

Я использую NH3.1.0-GA и MsSqlCe40Dialect.

Сгенерированный оператор вставки:

INSERT INTO Element values ( )

И отображение:

<class name="IElement" table ="Element">
    <id name="Id">
        <generator class="identity"/>
    </id>

    <joined-subclass name="TextElement" table ="TextElement">
        <key column="Id"/>
        <property name="Text" length="200"/>
    </joined-subclass>

    <joined-subclass name="NumberElement" table="NumberElement">
        <key column="Id"/>
        <property name="Value"/>
    </joined-subclass>

</class>

Спасибо.

1 Ответ

2 голосов
/ 23 мая 2011

Это определенно ошибка (точнее, пока не поддерживаемый сценарий). Я предлагаю вам создать проблему с полным репро тестом на http://jira.nhforge.org (вы можете дать ссылку на этот вопрос)

Синтаксис MSSQL для вставки без значения: INSERT INTO <table> DEFAULT VALUES. Это определено в MsSql2000Dialect.NoColumnsInsertString.

Тот же код, вероятно, следует применять к MsSqlCe40Dialect (или MsSqlCeDialect, если этот синтаксис был доступен в предыдущих версиях, чего я не знаю).

В качестве обходного пути просто наследуйте от MsSqlCe40Dialect и добавьте следующее:

public override string NoColumnsInsertString
{
    get { return "DEFAULT VALUES"; }
}

Конечно, я предполагаю, что это правильный синтаксис для SQL CE 4.

...