2
여기

내가 속성 X가 특정 클래스에 대한 범위 < 날짜 시간>, 범위 < INT> ... 같은 특성을 가지고 많은 개체가 매핑 내 도메인에서FluentNHibernate로 일반 구성 요소를 구성하는 방법은 무엇입니까?

public class Range<T> : ValueObject 
{ 
    public virtual T Start {get; set;} 
    public virtual T Finish {get; set;} 
} 

을 구성 할 구성 요소입니다 우리는이 방법으로 구성 요소를 구성합니다 :

persistenceModel.FindMapping<Customer>() 
    .Component<Address>   ( 
       x => x.CustomerAddress, 
       m => 
       { 
        m.Map(x => x.Street).WithLengthOf(100); 
        m.Map(x => x.PostalCode).WithLengthOf(6); 
        m.Map(x => x.Town).WithLengthOf(30); 
        m.Map(x => x.Country).WithLengthOf(50); 
       }); 

일반 도메인 T는 어떻게 일반 규칙으로 보입니까? 나는 뭔가를 놓친다. FluentNhibernate로 가능하지 않습니까?

답변

1

그런 목적으로 FindMapping을 사용하면 안됩니다. 이 방법을 통해 매핑을 변경할 수 있다는 것은 감독이며 확실히 의존해서는 안됩니다. 그 방법은 을 변경하지 않고 지속성 모델을 검사하는 것입니다. 자동 매핑을 사용하는 경우 overrides을 조사해야합니다.


ICompositeUserType 구현으로 문제가 해결 될 수 있다고 생각합니다. 이를 구현하는 방법에 대한 온라인 자료는 generic composite user type implementation입니다. 범위 속성을 정상적으로 매핑하면 CustomType을 사용하여 사용자 유형을 제공하십시오.

Map(x => x.Range) 
    .CustomType<RangeUserType>(); 

당신은 새로 도입 ComponentMap 기능이 함께 할도 수 있지만,베이스 클래스를 사용하지 않고 매핑 개방 제네릭 형식을 지원하지 않습니다. 이 같은

뭔가 아마 작동합니다 :

public abstract class RangeMap<T> : ComponentMap<T> 
{ 
    protected RangeMap() 
    { 
    Map(x => x.Start); 
    Map(x => x.Finish): 
    } 
} 

public class IntRangeMap : RangeMap<int> 
{} 

public class DateRangeMap : RangeMap<DateTime> 
{} 

인정 하듯이, 이상적 아니다.

관련 문제