Недопустимый индекс n для этой коллекции SqlParameterCollection с Count = m

Я получаю эту неприятную ошибку в Castle Active Record (обернутую вокруг NHibernate), когда пытаюсь сохранить класс:

Недействительный индекс n для этой коллекции SqlParameterCollection с Count = m

Я знаю, что эта ошибка вызвана многократным отображением свойства в классе, однако я не знаю, как ее обойти. У меня есть два дочерних класса, которые оба сопоставляются с рассматриваемым классом, используя один и тот же столбец (IpAddressNumber). Также IpAddressNumber является первичным ключом класса, что приводит к тому, что NHibernate трижды пытается сопоставить свойство IpAddressNumber (просто предположение).

Вот класс:

[ActiveRecord(Lazy=true)]
    public class DeviceConfiguration : UsersDatabase<DeviceConfiguration>
    {
        [PrimaryKey]
        public virtual long IPAddressNumber { get; set; }

        [BelongsTo("IPAddressNumber", Lazy = FetchWhen.OnInvoke)]
        public virtual Vehicle Vehicle { get; set; }

        [BelongsTo("IPAddressNumber", Lazy = FetchWhen.OnInvoke)]
        public virtual JBusConfiguration JBusConfiguration { get; set; }
}

Любая помощь будет принята с благодарностью ...


person Justin    schedule 23.02.2011    source источник
comment
это похоже на проблему дизайна БД ... вы используете таблицу только для хранения IP-адресов?   -  person Mauricio Scheffer    schedule 24.02.2011
comment
Нет, я удалил другие свойства DeviceConfiguration, чтобы показать соответствующие ассоциации. Наличие 2 дочерних таблиц, которые ссылаются на родительскую таблицу на основе ее PK, мне не кажется проблемой дизайна db ...   -  person Justin    schedule 24.02.2011
comment
Если бы это был прямой NHibernate, это то, что использовало бы конфигурацию ‹join›, где у вас есть отношение 1: 1 между родительской и дочерней таблицами, верно? Вопрос только в том, как ActiveRecord поддерживает отношения 1: 1.   -  person Rich    schedule 24.02.2011
comment
BelongsTo предназначен для отношений 1: 1.   -  person Justin    schedule 24.02.2011
comment
Мне это не кажется дубликатом, они используют файл сопоставления xml, я использую кодовый подход в сочетании с Active Record. Также мой связан с внешним ключом, их ошибка была ошибкой, когда они дважды определяли pk.   -  person Justin    schedule 29.09.2011


Ответы (1)


В итоге мне пришлось просто удалить вторую ассоциацию, чтобы обойти эту проблему. Не лучшее решение, но единственное, что я смог найти.

person Justin    schedule 25.04.2011
comment
Это действительно не лучшее решение. У меня та же проблема, которая является новой для NHibernate 3, поскольку у меня было такое же сопоставление с ранних версий NHibernate 2, и мне не нужно было менять это до недавнего обновления до NHibernate 3. - person Asbjørn Ulsberg; 15.09.2011