NHibernate:连接子类和 Sql Compact 4 的插入语句不正确
我已经使用每个子类的表映射了类层次结构,并且它 适用于 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>
谢谢。
I have mapped a class hierarchy using a table per subclass and it
works with Sql Server 2005.
However, when I try to use this same mapping against a Sql Compact 4.0
db, the generated insert statement is not working because it does not
include any column or value.
I'm using NH3.1.0-GA and MsSqlCe40Dialect.
The insert statement generated is:
INSERT INTO Element values ( )
And the mapping:
<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>
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这绝对是一个错误(更准确地说,是一个尚未支持的场景)。我建议您在 http://jira.nhforge.org(您可以链接对于这个问题)
无值插入的 MSSQL 语法是
INSERT INTO ;默认值。这是在
MsSql2000Dialect.NoColumnsInsertString
中定义的。相同的代码可能应该应用于
MsSqlCe40Dialect
(或MsSqlCeDialect
如果此语法在以前的版本中可用,我不知道)。作为解决方法,只需继承
MsSqlCe40Dialect
并添加以下内容:当然,我假设这是 SQL CE 4 的正确语法。
That's definitely a bug (more precisely, a yet-unsupported scenario). I suggest you create an issue with a full repro test at http://jira.nhforge.org (you can link to this question)
The MSSQL syntax for a value-less insert is
INSERT INTO <table> DEFAULT VALUES
. This is defined inMsSql2000Dialect.NoColumnsInsertString
.The same code should probably be applied to
MsSqlCe40Dialect
(orMsSqlCeDialect
if this syntax was available in previous versions, which I don't know).As a workaround, just inherit from
MsSqlCe40Dialect
and add the following:Of course, I'm assuming that is the correct syntax for SQL CE 4.