Свободная коллекция автозапчастей nhibernate - PullRequest
2 голосов
/ 08 июля 2010

Я пытаюсь сопоставить свои коллекции с помощью автоматического сопоставления FNHib.Проблемы, которые я хочу решить:

1) Я хочу, чтобы все мои коллекции в проекте отображались через личное поле.Как я могу сказать это глобально?

2) Есть ли способ автоматизировать двунаправленные отношения без явного переопределения каждой из моих сущностей.

пример класса OrganizationEntity:

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

get{return _collectionWarehouse; }

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

}

Пример класса WarehouseEntity:

public virtual OrganizationEntity Organization{get;set;}

1 Ответ

3 голосов
/ 10 июля 2010

Вы можете сопоставить свои коллекции с частным полем «глобально» при следующем соглашении:

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

Всякий раз, когда вы хотите установить «глобальное» предпочтение автомата в FNH, подумайте о соглашениях. Если вам нужно, вы используете IAutoOverride на заданной карте классов.

Поскольку часть set (HashSet, как правило, то, что мне действительно нужно), в последний раз, когда мне приходилось делать отображение, мне нужно было выполнить переопределение, например:

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

    }
}

Я согласен, что это должно перерасти в конвенцию, и, может быть, вы можете сделать это в наши дни. Пожалуйста, напишите, если вы выясните это.

НТН,
Berryl

КОД ДЛЯ ИСПОЛЬЗОВАНИЯ ХАШШЕТА как ICollection =================

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