NHibernate:连接子类和 Sql Compact 4 的插入语句不正确

本文关键字:插入 语句 不正确 Compact Sql 连接 子类 NHibernate | 更新日期: 2023-09-27 17:57:11

我已经使用每个子类的表映射了一个类层次结构,它适用于 Sql Server 2005。

但是,当我尝试对 Sql Compact 4.0 使用相同的映射时db,生成的插入语句不起作用,因为它没有包括任何列或值。

我正在使用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>

谢谢。

NHibernate:连接子类和 Sql Compact 4 的插入语句不正确

这绝对是一个错误(更准确地说,是一个尚不受支持的场景)。我建议您在 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的正确语法。