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