gpt4 book ai didi

c# - 防止 NHibernate 将 Returning 子句添加到生成的插入语句中

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:17 25 4
gpt4 key购买 nike

当我从使用 .NET 库的 API 中提取数据时,我目前正在使用 NHibernate 在我的数据库中创建条目以允许与其交互。我目前正在使用 Greenplum,不幸的是它不支持 RETURNING 子句(添加到 NHibernate 生成的查询的末尾)。

我想知道是否可以禁止在 INSERT 语句末尾添加“返回 id”?就好像我在 Python 中使用 SQLAlchemy(我更熟悉它)做类似的事情一样,我可以执行以下操作来防止添加 RETURNING 子句:

    engine = create_engine(conn_str, implicit_returning=False)

希望我提供了足够的信息,我们将不胜感激。

亲切的问候,

亚当·斯泰尔斯

最佳答案

您需要使用 SQL dialect与您的数据库兼容。引用文档可能不完整,请查看 sources用于检查所有现有的方言。 目前看起来没有专门的方言。

因为它来自 ,您可以尝试改用 PostgreSQL 方言。这可能已经是您正在做的事情,但您需要使用一个不声称支持返回插入的 ( Dialect.SupportsInsertSelectIdentity )。 PostgreSQLDialect 没有声称支持它,但 PostgreSQL81Dialect 和后来的支持。所以尝试使用 PostgreSQLDialect

您可以改为为 Greenplum 编写和使用方言,方法是从最接近的现有方言派生,然后覆盖需要更改的内容。 (如果你愿意,你可以 contribute 它到 NHibernate。)

注意事项:

  1. 当在插入时使用数据库端生成的 ID 时会出现此问题,例如标识。使用其他生成器策略也可以避免麻烦,同时具有不在 ISession.Save 上立即触发 insert 的额外好处,从而实现批处理、更好的工作单元语义, ...
  2. 使用交易!否则,当禁用 Dialect.SupportsInsertSelectIdentity 时,错误可能会导致您的应用程序无法检索插入的 ID。 (以多种形式出现:NH-926NH-2145NH-3600。或者,您可以将 connection.release_mode 配置属性设置为 on_close。)

关于c# - 防止 NHibernate 将 Returning 子句添加到生成的插入语句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43863726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com