В Fluent NHibernate, как вы комбинируете автоматизированные типы с неавтоматизированными типами? - PullRequest
2 голосов
/ 22 октября 2009

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

Может ли кто-нибудь помочь мне здесь?

Подробнее:

Я также попробовал технику, упомянутую в вики-энтузиасте здесь . Увы, я все еще получаю сообщение об ошибке: Duplicate class/entity mapping.

1 Ответ

2 голосов
/ 22 октября 2009

Пример смешанного беглого отображения и автоматического сопоставления в вики должен работать, если нет, то есть ошибка.

В качестве обходного пути исключите типы, которые были сопоставлены вручную из ваших автоматических сопоставлений. Это можно сделать с помощью метода Where, как показано в примерах вики, что-то вроде этого:

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

Если у вас много беглых отображений, вы можете создать коллекцию, чтобы сохранить чистоту настройки автоотображения:

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

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

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

...