Pergunta

Agora, eu estou mudando meu projeto sobre a partir do estilo nhibernate fluente clássico de definir manualmente um ClassMap para cada entidade de domínio, para ter a auto-mapeador de auto-gerar os mapeamentos para mim. Mas eu gostaria de continuar usando as classes I já mapeados no estilo clássico, até que eu possa ajustar as automappings para coincidir com os antigos mapeamentos clássicos.

O único problema é que nhibernate fluente falha quando o mapeador de auto atinge uma classe que já foi mapeado no estilo nhibernate fluente clássico.

Aqui está o meu código de configuração 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>();

Alguém pode me ajudar aqui?

Mais informações:

Eu também tentei a técnica mencionada no fluente nhibernate wiki aqui . Infelizmente eu ainda estou recebendo o erro:. Duplicate class/entity mapping

Foi útil?

Solução

O mista mapeamentos fluentes e mapeamentos de auto exemplo no wiki deve trabalhar, se ele doesn 't, em seguida, há um bug.

Como uma solução alternativa, excluir os tipos que foram mapeados manualmente de você automappings. Você faria isso usando o método Where, como mostrado nos exemplos de wiki, algo como isto:

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

Se você tem um monte de mapeamentos fluentes, você pode criar uma coleção para manter a configuração do mapeamento automático limpa:

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

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

Mais uma vez, isso não deve ser necessário, mas se você está certo é não trabalhar com o exemplo wiki então eu sugiro que levantar uma questão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top