我正在尝试将该集合映射两天而没有成功。我还阅读了所有可能的文章和论坛,但仍然在那里。好的,这是问题所在:
1)集合类包含一个私有字段“_internalCollection”,它与NHib映射。
2)持有实体应通过readonly属性公开收集。
3)我想避免实现NHibernate接口IUserCollectionType !!!
我使用xml映射完成了这项工作,效果很好。 WarehouseEntity是一个集合Item。仓库是OrgEntity类中的只读属性。
<component name="Warehouses" class="Core.Domain.Collections.EntitySet`1[Core.Domain.OrgStructure.IWarehouseEntity,Core],Core">
<set name="_internalCollection" table="`WAREHOUSE`" cascade="save-update" access="field" generic="true" lazy="true" >
<key column="`WarehouseOrgId`" foreign-key="FK_OrgWarehouse" />
<!--This is used to set the type of the collection items-->
<one-to-many class="Domain.Model.OrgStructure.WarehouseEntity,Domain"/>
</set>
</component>
任何想法我怎么能用流利的NHibernate来做呢?
编辑:Core.Domain.Collections.EntitySet`1是基本集合类。它提供了使用集合的基本功能,并且可以适合任何IEntity接口类。
答案 0 :(得分:3)
尝试:
HasMany(x => x.Warehouses)
.AsSet().KeyColumn("WarehouseOrgId")
.Access.CamelCaseField(Prefix.Underscore)
.ForeignKeyConstraintName("FK_OrgWarehouse");
编辑:我错过了问题的关键部分,所以这是另一个尝试:
Component(x => x.Warehouses, m =>
{
m.HasMany<Warehouse>(Reveal.Member<EntitySet<IWarehouseEntity>>("_internalCollection")
.AsSet().KeyColumn("WarehouseOrgId")
.ForeignKeyConstraintName("FK_OrgWarehouse");
});
我确信不是这样,但希望它能让你走上正确的道路。还可以使用ComponentMap查看。
我的建议是完全避免自定义集合。我用IEnumerable<T>
上的扩展方法替换了我们所有的。