Я получаю IndexOutOfBoundsException
при попытке использовать Fluent NHibernate для сопоставления словаря. Мой код отображения в основном пиратский с здесь , главное отличие в том, что я использую таблицу для иерархии для обработки наследования:
class StateEngineMap : ClassMap<StateEngine>
{
internal StateEngineMap()
{
Table(TableNames.StateEngine);
Id(x => x.Id);
DiscriminateSubClassesOnColumn(ColumnNames.Algorithm);
References(x => x.TermName);
Component(x => x.Config, config =>
{
config.HasMany(c => c.ConfigParams)
.Table(TableNames.ConfigParameter)
.KeyColumn("ParameterId")
.AsMap<string>(idx => idx.Column(ColumnNames.ParameterName), elem => elem.Column(ColumnNames.ParameterValue))
.Not.LazyLoad()
.ForeignKeyCascadeOnDelete();
});
}
}
My StateEngine
*Класс 1011 * создается до доступа к указанному выше ClassMap
;Я заполняю словарь ConfigParams
, когда создается класс StateEngine
. IndexOutOfBoundsException
возникает, когда я пытаюсь построить фабрику сеансов. Если я установлю точку останова в методе AsMap
, описанном выше, я вижу, что IndexPart idx
не имеет столбцов, поэтому с этой точки зрения я понимаю исключение. Но разве AsMap не должен собирать пары ключ-значение из словаря? Чего мне не хватает?
EDIT : словарь, вызывающий проблему выше, имеет тип IDictionary<string, object>
. Если я изменяю тип на IDictionary<string, int>
, миграция работает (кроме новой проблемы, которая является отдельной темой). Мне нужен словарь типа IDictionary<string, object>
, так как тип возвращаемого значения может быть одним из различных числовых типов. Кроме того, для функционального словаря нет разницы в количестве столбцов idx , когда я нарушаю AsMap ();Сейчас я не уверен, что означает этот член колонны, но похоже, что это красная сельдь.
Другая ошибка, с которой я сталкиваюсь при работе с IDictionary<string, object>
, заключается в следующем: collection element mapping has wrong number of columns: Locnes.Domain.State.Management.AveragingStateEngine.Config.ConfigParams type: Object