如何使用fluentNHibernate映射NHibernate自定义集合?

如何使用fluentNHibernate映射NHibernate自定义集合?,nhibernate,collections,fluent-nhibernate,nhibernate-mapping,Nhibernate,Collections,Fluent Nhibernate,Nhibernate Mapping,我试图绘制收藏地图两天都没有成功。我也读了所有可能的文章和论坛,但仍然在那里。好的,问题是: 1) collection类包含一个私有字段“\u internalCollection”,该字段与NHib映射 2) 持有实体应公开集合槽只读属性 3) 我想避免实现NHibernate接口IUserCollectionType 我用xml映射实现了这一点,效果非常好。仓库实体是一个集合项。仓库是OrgEntity类中的只读属性 <component name="Warehouses" cl

我试图绘制收藏地图两天都没有成功。我也读了所有可能的文章和论坛,但仍然在那里。好的,问题是:

1) collection类包含一个私有字段“\u internalCollection”,该字段与NHib映射

2) 持有实体应公开集合槽只读属性

3) 我想避免实现NHibernate接口IUserCollectionType

我用xml映射实现了这一点,效果非常好。仓库实体是一个集合项。仓库是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接口的类。

请尝试:

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");
    });
组件(x=>x.仓库,m=>
{
m、 HasMany(揭示成员(“\u internalCollection”)
.AsSet().KeyColumn(“仓库组织”)
.ForeignKeyConstraintName(“FK_OrgWarehouse”);
});
我肯定不是这样的,但希望它能让你走上正确的道路。也可以看看使用


我的建议是完全避免自定义集合。我用
IEnumerable

上的扩展方法替换了我们所有的方法。这不起作用。这里没有提到属性的名称。映射字段的流畅程度如何?仓库不是ISet类型,而是EntitySet类型。我认为这会起作用。必须运行所有测试并查看它是否为修订版eal类就是我要找的…10x组件(x=>x.Departments,m=>{m.HasMany(leaver.Member(“\u internalCollection”)).Access.Field().KeyColumn(“DepartmentOrgId”).ForeignKeyConstraintName(“FK\u OrgDepartment”).AsSet()});一个问题。您能否使用IEnumerable和扩展方法+添加属性SelectedItem和此SelItem以映射到NHibernate。如果可能,我将接受您的建议…我不理解这个问题,您可能应该将其作为一个新问题来问以获得答案。我使用扩展方法来筛选集合。您的扩展如何用于将项添加到IEnumerable中,如图所示?