2010-07-08 2 views
2

FNHib automapping으로 내 컬렉션을 매핑하려고합니다. 해결하고자하는 문제는 다음과 같습니다.Fluent nhibernate automapping collection

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;} 
+0

제임스 그레고리 3 월 12, 2010 현재로서는 할 수 없습니다. automapper는 매우 독단적이고 유연성이 없으며 콜렉션이 IList 또는 ISet으로 노출 될 것으로 기대합니다. 나는 당신의 다른 질문에서도 똑같이 말했지만, 이것은 내가 적극적으로 개선하기 위해 노력하고있는 것입니다. 그래도 지금은별로 통합되지 않았습니다. 다시 한 가지 옵션은 도메인의 침입과 함께 (IList 노출), 모든 발생을 무시하거나 이러한 클래스에 대해 자동 매핑을 사용하지 않는 것입니다. http://support.fluentnhibernate.org/discussions/help/37-automapper-doesnt-map-hasmany-collections-which-uses-a-backing-field – mynkow

답변

3

다음과 같은 규칙을 사용하여 '세계'private 필드에 컬렉션을 매핑 할 수 있습니다 :

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

FNH에서 '글로벌'automap 환경 설정을 원할 때마다 컨벤션 . 필요한 경우 주어진 클래스 맵에서 IAutoOverride를 사용합니다.

는 지금까지 세트 (A HashSet의 난 정말 또한 원하는 보통) 부분, 좀 매핑을해야했다 마지막 시간을 가지고, 내가 좋아하는, 재정의를 할 필요가 않았다

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

    } 
} 

I 그렇지만 컨벤션으로 전환해야한다는 것에 동의하고, 요즘은 할 수 있습니다. 알아 내면 게시하십시오.

HTH,
Berryl

코드가 ICollection에 같이 HashSet의를 사용하는 =================

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

음, 그게 내가 피하기를 원하는 것입니다. 실재. – mynkow

+0

btw IList 또는 ISet을 사용하더라도 ICollectionConvention가 작동하지 않습니다. 대체물, 재정의 및 규칙을 구성해야하는 순서가 있습니까? – mynkow

+0

글쎄, 운이없는 또 다른 하루. 헤이 Berryl, 이것에 대해 나에게 더 많은 힌트를 줄 수 있니? – mynkow