Итак, с основным отображением дискриминатора все работает хорошо. Я могу напрямую взаимодействовать с объектами A и B без каких-либо проблем.
public class BaseType {}
public class EntityA : BaseType {}
public class EntityB : BaseType {}
Это отображается без драматизма в сопоставлении BaseType как
DiscriminateSubClassesOnColumn<string>("Type")
.SubClass<BaseType>("A", m => { })
.SubClass<BaseType>("B", m => { });
Проблема возникает, когда: в совокупности мы хотим сопоставить коллекции с каждым подклассом
Использование сопоставления, как показано ниже
public class AggregateMap: BaseMap<Aggregate>
{
public AggregateMap()
{
HasMany<EntityA>(x => x.ACollection).AsSet().Cascade.All();
HasMany<EntityB>(x => x.BCollection).AsSet().Cascade.All();
}
}
Очевидно, что это не полные сопоставления, но они представляют собой минимальное количество для описания того, что я пытаюсь сделать. Элементы, добавленные в ACollection и BCollection, правильно сохраняются посредством каскадирования при сохранении Aggregate. Однако при извлечении агрегата возникает путаница с распознаванием типов.
Я перебрал так много разных возможных решений, что больше не знаю, что не сработало. Я чувствую, что мне не нужно предоставлять предложение where для коллекций, но у меня что-то просто не работает.
Будем признательны за любые подсказки.
WriteMappingsTo()
), чтобы их можно было проверить. Возможно, FNH каким-то образом сопоставляет обе коллекции с одним и тем же типом; если да, то это ошибка в FNH. - person Asbjørn Ulsberg   schedule 28.10.2010