我正在从 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 属性?