Em Fluent NHibernate Como combinar tipos automapped com tipos não-automapped?
-
05-07-2019 - |
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
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.