NHibernateマッピングまたはFluent NHibernateを使用して複数列インデックスおよび/または一意制約を作成する方法NHibernateを使用して複数列インデックスまたは一意制約を作成する方法
答えて
もっとして1つのプロパティにインデックス/一意の制約名を割り当てる
<property name="A" index="AB" />
<property name="B" index="AB" />
、それはまた、同じエンティティにもっとして1つのインデックスを持つ働くだろう理論:
<property name="A" index="AB, ABC" />
<property name="B" index="AB, ABC" />
<property name="C" index="ABC" />
But there is a bug.私もパッチを書いた。もしあなたがこれに興味があれば、バグに投票したり、コメントなどを追加してください。
を編集してください:the bugに何が起こったかを確認しました。これはバージョン2.1.0で修正されているので、今は完全に動作するはずです。偉大なNHibernate開発チームのおかげです!
古いが、私はこの同じ問題に出くわしたので、私は追加する何かを持っている:
はStefan Steineggerは非 -uniqueマルチカラム・インデックスに対して正しく答えたが、ユニーク複数列のコードを残しインデックス。それらのために使用することができます:
<property name="A" unique-key="AB" />
<property name="B" unique-key="AB" />
したがって、本質的には同じですが、属性名が異なります。
注意する興味深いのは、一意索引のため、NHibernateのはキーのために独自の名前を生成していることであるが、非一意索引のために、それはあなたがそれを与えるものは何でも使用しています。
たとえば、上記のコードでは、 "AB"というユニークなインデックスは生成されませんが、UQ__TableName__7944C87104A02EF4
のようなものが生成されます。
これは、NHibernateのドキュメントのsection 19.1.1で文書化されています
一部のタグは、その列の インデックスの名前を指定するための
index
属性を受け入れます。unique-key
属性を使用して、 列を1つのユニットキー制約にグループ化することができます。現在、unique-key属性の指定された の値は、ではありません。は、マッピングファイルの列をグループ化する場合にのみ、制約の名前を付けるために使用されます。
ただし、以下:
<property name="A" index="AB" />
<property name="B" index="AB" />
ちょうど "AB" という名前のインデックスを生成します。
- 1. 複数のテーブルにわたって一意(インデックス)制約を作成することはできますか?
- 2. 2列の一意制約の作成
- 3. 一度に複数のオブジェクトを作成して一意制約の例外を無視する方法
- 4. 複数の列にわたる一意制約
- 5. 既存の重複値を持つ関数ベースのインデックスに対する一意の制約を作成する
- 6. 降順オプションを使用して複数列インデックスを作成する方法
- 7. クエリのパフォーマンスをマージ - 一意の制約またはインデックス?
- 8. 主キー制約または一意キー制約がすでに存在する列での索引の作成
- 9. NHibernateの一意制約重複の場合の除外
- 10. 一意の制約を使用してデータベースレコードを更新する
- 11. データベースの一意性制約がアソシエーションを使用して重複レコードの作成を停止しない
- 12. SQLAlchemyの列全体に一意制約を適用する方法は?
- 13. 複数の列を含むネストされたJSONに一意制約を設定する方法
- 14. JPA - 複数列の一意制約の定義
- 15. 異なる表の列に対する複数列の一意性制約
- 16. SQL Server、MySQLデータベースで一意制約を作成する
- 17. NHibernate - 一意性を強制する方法?
- 18. Oracleチェック制約列がゼロまたは一意である
- 19. MongoDBでキー順列の一意性を強制するユニークな複合インデックスを作成できますか?
- 20. インデックスを使って複数の列を集約する巧妙な方法
- 21. Enitity Frameworkが複数の列に一意の制約を正しく適用していません
- 22. 2つのフィールドを使用して制約を作成する方法
- 23. 複数のビューに一意のIDを作成して使用するOnclick
- 24. MongoDB:複数の単一のインデックスまたは複合インデックスを使用する
- 25. sequelizeで複数の列に一意のインデックスを定義する方法
- 26. 複数のリストを一意のキーで使用して辞書を作成する方法
- 27. トリガーまたは制約を作成して重複データをファイリングする
- 28. 列に一意の制約を作成すると、自動的に索引が作成されますか?
- 29. 一意の列に複数のNULLを受け入れる条件を持つ一意の制約
- 30. Entity Framework Code Firstを使用して一意制約を設定する方法は?
Fluent NHibernateの場合、SetAttributeを使う必要があります。 Map(x => x.A).SetAttribute( "index"、 "AB"); –
流暢なNHibernateは 'SetAttribute'を使わなくても' .Index( "IndexName ...") 'をサポートするようになりました。 – Phill
'index'(と 'unique-key' too)プロパティは、CREATE TABLE文を生成し、NHibernateがセッションを使用しているときにNHibernateが重複行を挿入しようとしても、NHibernateがCREATE TABLE文を生成するときにのみ使用されます。保存するなど – mayu