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

发布于 2024-11-09 06:54:42 字数 796 浏览 0 评论 0原文

我已经使用每个子类的表映射了类层次结构,并且它 适用于 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

东走西顾 2024-11-16 06:54:42

这绝对是一个错误(更准确地说,是一个尚未支持的场景)。我建议您在 http://jira.nhforge.org(您可以链接对于这个问题)

无值插入的 MSSQL 语法是 INSERT INTO ;默认值。这是在 MsSql2000Dialect.NoColumnsInsertString 中定义的。

相同的代码可能应该应用于 MsSqlCe40Dialect (或 MsSqlCeDialect 如果此语法在以前的版本中可用,我不知道)。

作为解决方法,只需继承 MsSqlCe40Dialect 并添加以下内容:

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

当然,我假设这是 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 in MsSql2000Dialect.NoColumnsInsertString.

The same code should probably be applied to MsSqlCe40Dialect (or MsSqlCeDialect if this syntax was available in previous versions, which I don't know).

As a workaround, just inherit from MsSqlCe40Dialect and add the following:

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

Of course, I'm assuming that is the correct syntax for SQL CE 4.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文