NHibernate と Firebird で ID を生成するにはどうすればよいですか?
-
03-07-2019 - |
質問
NHibernate を使用して、いくつかの新しいオブジェクトを Firebird データベースに挿入しようとしています。
「次のシーケンス値を取得できませんでした[SQL:SQL は使用できません]"
現在使用しているマッピングは次のとおりです。注: ANML_EVNT は、使用するジェネレーターの名前です。
<id name="Id" column="ID" type="integer">
<generator class="sequence">
<param name="sequence">ANML_EVNT></param>
</generator>
</id>
解決
それでも答えを探している場合は、私がそれをうまく使用した方法をここに示します。
私が「ネイティブ」ジェネレーターを使用しているのは、プログラムに SQL Server のサポートを追加するときに、NHibernate で変更する必要があったのはジェネレーターの種類を「ネイティブ」に変更するだけだったためです。これは、Firebird と SQL Server の「自動インクリメント ID」列の実装方法が異なるためです。Firebird では名前付きジェネレーターが使用され、SQL Server では "sequence" パラメーターを無視して組み込みの自動インクリメントが使用されます。
私が話していることの例は次のとおりです。
<id name="Id" column="ID">
<generator class="native">
<param name="sequence">ANML_EVNT</param>
</generator>
</id>
そうは言っても、gcores が回答したように、構成で間違っているように見えるのは、ANML_EVNT の後の余分な ">" だけです。
他のヒント
これで問題ありません。問題は、ANML_EVNTの後の終了ブラケットではありませんよね?
<id name="Id" column="ID" type="integer">
<generator class="sequence">
<param name="sequence">ANML_EVNT</param>
</generator>
</id>
所属していません StackOverflow