xmlマッピングからコードベースのマッピングに移行しています。NHibernateMapコレクションで発生している問題があります。
以下は完全に機能するxmlマッピングです(少し単純化されており、実際にはより多くのプロパティとコレクションがあります):
<class name="Company" where="IsDeleted=0" lazy="false">
<id name="Id">
<generator class="guid"></generator>
</id>
<map name="Contacts" lazy="true" cascade="all" where="IsDeleted=0">
<key column="CompanyId"></key>
<index column="Id" type="guid"></index>
<one-to-many class="CompanyContact"/>
</map>
</class>
私が思いついた代替コードマッピングは次のとおりです。
public CompanyMap()
{
Id(x => x.Id, mapper => mapper.Generator(Generators.Guid));
Map(x => x.Contacts,
m =>
{
m.Where(FILTER);
m.Cascade(Cascade.All);
m.Lazy(CollectionLazy.Lazy);
m.Key(c => c.Column("CompanyId"));
}, k =>
{
k.Element(e =>
{
e.Column("Id");
});
k.OneToMany(e => e.Class(typeof(CompanyContact)));
});
}
上記は、マップの次のhbmlを生成します。
<map name="Contacts" lazy="true" cascade="all" where="IsDeleted=0">
<key column="CompanyId" />
<map-key type="Guid" />
<one-to-many class="CompanyContact" />
</map>
ここには明らかにインデックス列がありません。したがって、SQLを生成するとき、nhibernateはidxであるDefaultIndexColumnNameを使用します。
では、問題は、マップのインデックスをどのように設定するかということです。
更新:休止状態のドキュメントによると、map-keyを使用する必要があります。では、質問を言い換えると、map-keyのcolumnプロパティをどのように設定しますか?