流畅的nhibernate自动化收集

时间:2010-07-08 07:03:44

标签: fluent-nhibernate automapping

我正在尝试使用FNHib自动映射我的集合。我想解决的问题是:

1)我希望通过私有字段映射项目中的所有集合。我怎么能在全球范围内说出来?

2)有没有办法在不明确覆盖我的每个实体的情况下自动化双向关系。

class OrganizationEntity示例:

private ISet<> _collectionWarehouse;
public virtual IEnumerable<WarehouseEntity> CollectionWarehouse
{

get{return _collectionWarehouse; }

set{_collectionWarehouse = new HashedSet<WarehouseEntity>((ICollection<WarehouseEntity>)value)}

}

Class WarehouseEntity示例:

public virtual OrganizationEntity Organization{get;set;}

1 个答案:

答案 0 :(得分:3)

您可以使用以下约定将您的集合映射到“全局”私有字段:

// assumes camel case underscore field (i.e., _mySet)
public class CollectionAccessConvention : ICollectionConvention
{
    public void Apply(ICollectionInstance instance) {
        instance.Access.CamelCaseField(CamelCasePrefix.Underscore);
    }
}

每当您想在FNH中设置“全局”自动化首选项时,请考虑约定。如果需要,可以在给定的类映射上使用IAutoOverride。

到目前为止集合(HashSet通常也是我真正想要的)部分,最后一次我必须做一些映射,我确实需要做一个覆盖,如:

   public class ActivityBaseMap : IAutoMappingOverride<ActivityBase>
{
    public void Override(AutoMapping<ActivityBase> m)
    {
        ...
        m.HasMany(x => x.Allocations).AsSet().Inverse();

    }
}

我同意这应该转化为一个约定,也许你现在可以这样做。如果你想出来请发帖。

HTH,
Berryl

使用HASHSET作为ICollection的代码=================

public virtual ICollection<WarehouseEntity> Wharehouses
{
    get { return _warehouses ?? (_warehouses = new HashSet<WarehouseEntity>()); }
    set { _warehouses = value; }
}
private ICollection<WarehouseEntity> _warehouses;