我正在从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的列属性?
答案 0 :(得分:1)
NHibernate版本3.3.1尚未实现。 在Jira中为此创建了一个问题。