1

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プロパティをどのように設定しますか?

4

1 に答える 1

1

これは、NHibernateバージョン3.3.1ではまだ実装されていません。そのためにJiraで問題を作成しました。

于 2012-07-09T10:32:27.763 に答える