Отображение FluentNhibernate Используя Ссылочный Индекс Из Диапазона При Добавлении нового Объекта

Я пытаюсь отобразить отношения отцов и детей между объектом Человека и Организационным объектом в FluentNHibernate с помощью Ссылок в отображающемся файле как это:

Ссылки (x => x. Организация);

Отношения являются объектом Человека, содержит столбец OrganizationId, который соответствует записи в таблице Organization с соответствующим OrganizationId. Различные записи Человека могут принадлежать той же Организации.

Когда я получаю объект Человека, он работает правильно. Человек. Организация заполняется. Я могу сохранить объект Человека, и он работает правильно. Однако, когда я пытаюсь добавить, что новый Человек возражает, что я вытаскиваю Индекс Из исключения Диапазона из NHibernate. Исключение происходит при вызове сессии. SaveOrUpdate (человек). Я попытался изменить отображение на:

Ссылки (x => x. Организация).Cascade. Ни один ()

Все еще получите ту же ошибку. Я не могу выяснить то, что вызывает исключение. Полное исключение - это:

Система. IndexOutOfRangeException: Недопустимый индекс 22 для этого SqlParameterCollection с Count=22. в System. Данные. SqlClient. SqlParameterCollection. RangeCheck (индекс Int32) в System. Данные. SqlClient. SqlParameterCollection. GetParameter (индекс Int32) в System. Данные. Распространенный. DbParameterCollection. Система. Наборы. IList.get_Item (индекс Int32) в NHibernate. Ввести. NullableType. NullSafeSet (IDbCommand cmd, Объектное значение, индекс Int32) в NHibernate. Ввести. ManyToOneType. NullSafeSet (IDbCommand st, Объектное значение, индекс Int32, булевская переменная [] устанавливаемый, сессия ISessionImplementor) в NHibernate. Стойкий организм. Объект. AbstractEntityPersister. Обезводьте (Идентификатор объекта, поля Object [], Объект rowId, булевская переменная [] includeProperty, булевская переменная [] [] includeColumns, таблица Int32, оператор IDbCommand, сессия ISessionImplementor, индекс Int32) в NHibernate. Стойкий организм. Объект. AbstractEntityPersister. GeneratedIdentifierBinder. BindValues (IDbCommand ps) в NHibernate. Идентификатор. Вставить. AbstractReturningDelegate. PerformInsert (SqlCommandInfo insertSQL, сессия ISessionImplementor, редактор связей IBinder) в NHibernate. Стойкий организм. Объект. AbstractEntityPersister. Вставьте (Объект [] поля, булевская переменная [] notNull, SqlCommandInfo sql, Объект obj, сессия ISessionImplementor) в NHibernate. Стойкий организм. Объект. AbstractEntityPersister. Вставьте (Объект [] поля, Объект obj, сессия ISessionImplementor) в NHibernate. Действие. EntityIdentityInsertAction. Выполнитесь () в NHibernate. Механизм. ActionQueue. Выполнитесь (исполняемый файл IExecutable) в NHibernate. Событие. Значение по умолчанию. AbstractSaveEventListener. PerformSaveOrReplicate (Объектный объект, ключ EntityKey, стойкий организм IEntityPersister, булевская переменная useIdentityColumn, Объект что-либо, источник IEventSource, булевская переменная requiresImmediateIdAccess) в NHibernate. Событие. Значение по умолчанию. AbstractSaveEventListener. SaveWithGeneratedId (Объектный объект, Строка entityName, Объект что-либо, источник IEventSource, булевская переменная requiresImmediateIdAccess) в NHibernate. Событие. Значение по умолчанию. DefaultSaveOrUpdateEventListener. SaveWithGeneratedOrRequestedId (событие SaveOrUpdateEvent) в NHibernate. Событие. Значение по умолчанию. DefaultSaveOrUpdateEventListener. EntityIsTransient (событие SaveOrUpdateEvent) в NHibernate. Событие. Значение по умолчанию. DefaultSaveOrUpdateEventListener. OnSaveOrUpdate (событие SaveOrUpdateEvent) в NHibernate. Impl. SessionImpl. FireSaveOrUpdate (событие SaveOrUpdateEvent) в NHibernate. Impl. SessionImpl. SaveOrUpdate (Возражают obj),

6
задан Jeff 10 March 2010 в 20:33
поделиться

1 ответ

Во-первых, исключение возникает из-за того, что вы дважды сопоставляете один и тот же столбец в своем классе, и это недопустимо. проверьте это IndexOutOfRangeException Deep в недрах NHibernate

Во-вторых (и согласно вашему последнему комментарию) наличие OrganizationId и свойства Organization в вашем классе Person вроде как идет против течения. Тебе это не нужно. Вы можете получить к нему доступ через per1.Organization.Id

. Если у вас уже есть организация в вашей базе данных (скажем, Id = 5) и вы сопоставляете класс Organization с классом Person с помощью внешнего ключа OrganizationId, тогда, когда вы code

Organization theOrganizationWithId5 = nhSession.Get<Organization>(5);
per1.Organization = theOrganizationWithId5;
nhSession.Save(per1);

NHibernate просто установит значение 5 в столбце OrganizationId в вашей таблице Person. Вы не будете заполнять Organization.

8
ответ дан 16 December 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: