Подтвердить что ты не робот

Свободная сущность NHibernate. Коллекции HasMany различных типов подклассов

Итак, все хорошо работает с основным отображением дискриминатора. Я без проблем могу напрямую взаимодействовать с объектами 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();            
        }
}

Эти, очевидно, arent полные сопоставления, но минимальная сумма, чтобы описать то, что я пытаюсь. Элементы, добавленные в ACollection и BCollection, сохраняются корректно через каскадирование, когда Aggregate сохраняется. Однако, когда агрегат извлекается, возникает путаница в типе дискриминации.

Я столкнулся с множеством различных возможных решений, которые я больше не знаю, что не работает. Я чувствую, что мне не нужно предоставлять предложение where, но вещи просто не работают для меня.

Любые подсказки будут оценены.

4b9b3361

Ответ 1

Отображение выглядит странно, в частности, я думаю, что он должен выглядеть больше, как этот

DiscriminateSubClassesOnColumn<string>("Type")
               .SubClass<EntityA>("A", m => { })
               .SubClass<EntityB>("B", m => { });

Сказав, что кажется, что метод обесценивается, и вместо этого вы должны определить следующее (взятое из Подклассы Automapping:

public class ParentMap : ClassMap<Parent>
{
  public ParentMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);

    DiscriminateSubClassesOnColumn("type");
  }
}

public class ChildMap : SubclassMap<Child>
{
  public ChildMap()
  {
    Map(x => x.AnotherProperty);
  }
} 

Не уверен, что это исправит, но я еще не столкнулся с вашим сценарием.

Изменить: проблема также поднята здесь, что больше похоже на ошибку для меня