2009-10-21 1 views
2

지금 당장은 각 도메인 엔티티에 대해 수동으로 ClassMap을 정의하는 고전적인 유창한 nhibernate 스타일부터 자동 매핑 기능을 사용하여 자동으로 매핑을 생성하도록 내 프로젝트를 전환하고 있습니다. 하지만 이전 클래식 매핑과 일치하도록 자동 매핑을 조정할 때까지 기존 스타일로 매핑 한 클래스를 계속 사용하고 싶습니다.Fluent NHibernate에서 자동 완성 된 유형을 자동 완성되지 않은 유형과 결합하는 방법은 무엇입니까?

유일한 문제는 자동 매퍼가 이미 유창한 nhibernate 스타일로 매핑 된 클래스에 부딪 힐 때 유창한 nhibernate가 충돌한다는 것입니다.

은 여기 내 AutoPersistenceModel 설정 코드입니다 :

_autoPersistenceModel = AutoMap.AssemblyOf<DomainEntity>(); 
_autoPersistenceModel.AddMappingsFromAssembly(typeof (PlayerPersistenceMap).Assembly); 

_autoPersistenceModel.Alterations(x => 
        x.Add<AutoMappingAlteration>()) 
       .Setup(s => 
       { 
        s.FindIdentity = type => type.Name == "ID"; 

        s.IsBaseType = type => (type == typeof(DomainEntity)); 
       }) 
       .Conventions 
        .AddFromAssemblyOf<IdentityColumnConvention>() 
        .UseOverridesFromAssemblyOf<PlayerMappingOverride>(); 

사람이 나를 여기 도와 드릴까요?

더 많은 정보 :

나는 또한 유창 - NHibernate에 위키 here에 언급 된 기술을 시도했다. 아아 나는 여전히 오류가 발생하고 있습니다 : Duplicate class/entity mapping.

답변

2

위키의 mixed fluent mappings and auto mappings example이 작동해야합니다. 그렇지 않으면 버그가 있습니다.

임시 해결책으로, 자동 매핑에서 수동으로 매핑 된 유형을 제외하십시오. 당신이 유창 매핑을 많이 가지고있는 경우

AutoMap.AssemblyOf<DomainEntity>() 
    .Where(type => type != typeof(OneOfYourManuallyMappedClasses)); 

, 당신은 청소 자동 매핑 설정을 유지하기 위해 컬렉션을 만들 수 있습니다 당신은 위키 예에서 쇼 같이 Where 방법을 사용하여 이런 일을 그렇게 할 것입니다 :

var mappedTypes = new[] { typeof(One), typeof(Two) }; 

AutoMap.AssemblyOf<DomainEntity>() 
    .Where(type => !mappedTypes.Contains(type)); 

다시 말하지만, 이것이 꼭 필요한 것은 아니지만 위키의 예와 관련이 없다는 것이 확실하다면 문제를 제기하는 것이 좋습니다.

+0

오류 메시지가 표시되었을 수있는 SchemaUpdate 관련 코드의 버그를 발견했지만 관계가 있는지 확신 할 수 없습니다. 문제를 해결하려면 수정 사항을 오늘 다시 테스트하고 문제가 아직 있으면 의견을 작성하십시오. 귀하의 의견을 보내 주셔서 감사합니다. –

+0

이봐, 내가 다시 가서 두 번 확인, 그리고 만약 내가 해결 방법을하지 않으면, 여전히 오류가 "중복 클래스/엔티티 매핑" –