Свободное отображение словаря NHibernate: IndexOutOfBoundsException? - PullRequest
0 голосов
/ 08 ноября 2019

Я получаю 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

...