В Fluent NHibernate, как вы комбинируете автоматизированные типы с неавтоматизированными типами?
-
05-07-2019 - |
Вопрос
Сейчас я переключаю свой проект с классического свободного стиля nhibernate на ручное определение ClassMap
для каждой сущности домена на автоматическое создание сопоставлений для меня. Но я бы хотел продолжать использовать классы, которые я уже отобразил, в классическом стиле, пока я не смогу настроить автоматические сопоставления в соответствии со старыми классическими сопоставлениями. Р>
Единственная проблема заключается в том, что беглый 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>();
Может ли кто-нибудь помочь мне здесь?
Дополнительная информация:
Я также попробовал технику, упомянутую в вики-странице «Свободный переходный день» здесь . Увы, я все еще получаю сообщение об ошибке: Дублирующее сопоставление класса / сущности
.
Решение
пример смешанных отображений и автоматических отображений в вики должен работать, если он это делает тогда есть ошибка.
В качестве обходного пути исключите типы, которые были сопоставлены вручную из ваших автоматических сопоставлений. Это можно сделать с помощью метода Where
, как показано в примерах вики, что-то вроде этого:
AutoMap.AssemblyOf<DomainEntity>()
.Where(type => type != typeof(OneOfYourManuallyMappedClasses));
Если у вас много беглых отображений, вы можете создать коллекцию, чтобы сохранить чистоту настройки автоотображения:
var mappedTypes = new[] { typeof(One), typeof(Two) };
AutoMap.AssemblyOf<DomainEntity>()
.Where(type => !mappedTypes.Contains(type));
Опять же, в этом нет необходимости, но если вы уверены, что он не работает с примером вики, я бы предложил поднять проблему.