В Fluent NHibernate, как вы комбинируете автоматизированные типы с неавтоматизированными типами?

StackOverflow https://stackoverflow.com/questions/1603460

Вопрос

Сейчас я переключаю свой проект с классического свободного стиля 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));

Опять же, в этом нет необходимости, но если вы уверены, что он не работает с примером вики, я бы предложил поднять проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top