1

我正在从 xml 映射转移到基于代码的映射。我在使用 NHibernate Map 集合时遇到了一个问题。

下面是完美工作的 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 回答