NHibernate映射代码Map集合

时间:2012-06-22 16:04:33

标签: nhibernate-mapping mapping-by-code

我正在从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)));
    });
}

上面为map创建了下一个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将使用默认的DefaultIndexColumnName。

所以问题是如何设置地图索引?

更新: 根据hibernate文档,我应该使用map-key。 所以要重新解释这个问题,我该如何设置map-key的列属性?

1 个答案:

答案 0 :(得分:1)

NHibernate版本3.3.1尚未实现。 在Jira中为此创建了一个问题。