C# 防止NHibernate向生成的insert语句添加Returning子句
我目前正在使用NHibernate在我的数据库中创建条目,从使用.NET库允许与之交互的API中提取数据。我目前正在使用Greenplum,不幸的是它不支持RETURNING子句(添加到NHibernate生成的查询的末尾) 我想知道是否可以禁止在INSERT语句末尾添加“returning id”?就像我在Python中使用SQLAlchemy(我更熟悉SQLAlchemy)执行类似的操作一样,我可以执行以下操作来防止添加返回子句:C# 防止NHibernate向生成的insert语句添加Returning子句,c#,nhibernate,greenplum,postgresql,C#,Nhibernate,Greenplum,Postgresql,我目前正在使用NHibernate在我的数据库中创建条目,从使用.NET库允许与之交互的API中提取数据。我目前正在使用Greenplum,不幸的是它不支持RETURNING子句(添加到NHibernate生成的查询的末尾) 我想知道是否可以禁止在INSERT语句末尾添加“returning id”?就像我在Python中使用SQLAlchemy(我更熟悉SQLAlchemy)执行类似的操作一样,我可以执行以下操作来防止添加返回子句: engine = create_engine(con
engine = create_engine(conn_str, implicit_returning=False)
希望我已经提供了足够的信息,任何帮助将不胜感激
亲切问候,
Adam Styles您需要使用与数据库兼容的SQL。参考文档可能不完整,请查看所有现有方言。目前似乎没有专用方言
由于它源于,您可以尝试使用PostgreSQL方言。这可能已经是您正在做的事情了,但是您需要使用一个不支持返回insert()的插件PostgreSqlDialogue
并不声称支持它,但PostgreSql81Dialogue
和更高版本都支持它。因此,请尝试使用PostgreSqlDialogue
相反,您可以为Greenplum编写和使用方言,方法是从最接近的合适的现有方言派生,然后覆盖需要更改的内容。(如果您愿意,可以将其发送给NHibernate。)
注:
ISession.Save上的立即insert
的额外好处,从而实现批处理、更好的工作单元语义
方言.SupportsInsertSelectIdentity
时,错误可能会导致应用程序检索插入的id失败。(以多种形式显示:,。或者,您可以设置连接。在关闭时将\u mode
配置属性释放为)
Greenplum不是为单例insert语句设计的,因此如果您试图插入很多行,即使您避开了这个问题,性能也会很差。您需要使用gpload来加载数据。