Свободная сущность 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, но вещи просто не работают для меня.
Любые подсказки будут оценены.
Ответы
Ответ 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);
}
}
Не уверен, что это исправит, но я еще не столкнулся с вашим сценарием.
Изменить: проблема также поднята здесь, что больше похоже на ошибку для меня