2017-05-09 57 views
2

我正在使用NHibernate從我的數據庫中創建條目時,從一個使用.NET庫的API中提取數據以允許與它交互。我目前使用Greenplum,不幸的是它不支持RETURNING子句(添加到由NHibernate生成的查詢的末尾)。阻止NHibernate添加返回子句到生成的插入語句

我想知道是否可以抑制在INSERT語句結尾添加「返回ID」?就好像我是做在Python類似與SQLAlchemy的(與我比較熟悉)的東西,我可以做到以下幾點,以防止被添加RETURNING子句:

engine = create_engine(conn_str, implicit_returning=False) 

希望我能提供足夠的信息,任何幫助將非常感謝。

親切的問候,

亞當風格

+0

Greenplum的不適合單插入語句這樣的表現將是,即使你解決這個窮得問題,如果你試圖插入很多行。你會想要使用gpload來加載數據。 –

回答

0

您需要使用您的數據庫兼容的SQL dialect。參考文件可能不完整,請檢查sources以檢查所有現有的方言。 目前沒有專門的方言。

因爲它來自,所以您可以嘗試使用PostgreSQL方言。這已經可能是你正在做的事情,但是你需要使用一個不支持返回插入的方法(Dialect.SupportsInsertSelectIdentity)。 PostgreSQLDialect不聲稱支持它,但PostgreSQL81Dialect和更高版本做。所以試試PostgreSQLDialect

您可以改爲使用最接近的現有方言編寫並使用Greenplum的方言,然後重寫需要更改的內容。 (你可以,如果你希望它contribute NHibernate的。)

注:

  1. 這件麻煩事出現在使用IDS生成在插入DB-側,比如身份。使用其他發電機策略也可以避免麻煩,同時具有不會觸發ISession.Save上的即時insert的額外好處,從而實現批處理,更好的工作單元語義...
  2. 使用事務!否則,當Dialect.SupportsInsertSelectIdentity被禁用時,錯誤可能會導致應用程序無法檢索插入的ID。 (看多種形式:NH-926NH-2145NH-3600或者,您可以connection.release_mode配置屬性設置爲on_close。)