НГибернейт:получение индекса вне диапазона при вызове флеша для операции вставки

StackOverflow https://stackoverflow.com/questions/1878263

  •  18-09-2019
  •  | 
  •  

Вопрос

Я потратил большую часть своего дня, пытаясь решить это сообщение, используя NHibernate:«Индекс был вне допустимого диапазона.Должно быть неотрицательным и меньше размера коллекции.Имя параметра:индекс"

Мое обновление и удаление работают нормально, но вызов сброса после вызова save() не работает.Я не думаю, что будет полезно публиковать весь код (его много), потому что я не уверен, что вам нужно будет увидеть на этом этапе.Мой объект доступа к данным, который я пытаюсь сохранить, использует составной ключ, если это помогает.Кроме того, я использую NHibernate.Mapping.Attributes для создания сопоставления.

Похоже, что в моей трассировке стека NHibernate пытается отправить недопустимое количество параметров в класс ADO.Net для операции вставки.При этом у меня установлено значение true для просмотра операторов sql, но ошибка возникает до того, как оператор sql отправляется на вывод, поэтому я не уверен, что он пытается построить.

public void Insert(ProddataDAO Entity)
{
        Entity.PSEQ = GetNewSeqID(Entity.PCUST); // <- because I'm using a composite key, this function gets my a unique value by a group
        NHibernateHelperCGC.CurrentSession.Save(Entity);            
        NHibernateHelperCGC.CurrentSession.Flush();   // <-This raises the error         
}

at System.Collections.ArrayList.get_Item (Int32 Index) на ibm.data.db2.iseries.idb2parametercollection.system.collections.ilist.get_item (int32 index) at nhibernate.type.decimaltype.set (idbcommand st, int. Индекс) в nhibernate.type.nullabletype.nullsafeset (idbcommand cmd, значение объекта, индекс int32) в nhibernate.type.nullabletype.nullsafeset (idbcommand st, объект, индекс int32, сеанс IsessionImplementor) atberernate. Idbcommand st, значение объекта, Int32 Begin, IsessionImplementor Session) в nhibernate.persister.entity.abstractentitypersister.dehydrate (идентификатор объекта, объект [] поля, объект rowid, boolean [] includepropert Заявление, сеанс IsessionImplementor, Int32 Index) at nhibernate.persister.entity.abstractentitypersister.insert (ID объекта, объект [] fields, boolean [] notnull, int32 j, sqlcommandinfo sql, объект obj, iSessionImplementor Session) athibernate. .Abstractentitypersister.insert (идентификатор объекта, объект [] поля, объект obj, сеанс IsessionImplementor) в nhibernate.action.entityInsertaction.execute () при nhibernate.engine.actionqueue.execute (iexecutable выполняется) в nhibernate.Engine.Quice.execuctions (iexecutable) в nhibernate.egine.ceepeue. Список илиста) в nhibernate.engine.actionqueue.executeactions () at nhibernate.event.default.abstractflushingeventlisterener.performexections (сеанс ieventsource) at nhibernate.event.default.mefaultflusheventListerener.onflush (flushevent Event) atberernate.slushplusheventlisterenerEnerEnerEnerEnerEnerEnerEnerEnerEner. ) на WTS.Data.DB2 .Productiondatausercontrolbase.testinsert () в C: Documents and Settings Briant My Documents Visual Studio 2008 Projects wtscgcappinterface wtscgcappinterface productiondatausercontrolbase.cs: line 483 at wtscgcappinterface.window1.button_click_1 (ytryevergesterser. : Documents and Settings Briant My Documents Visual Studio 2008 Projects wtscgcappinterface wtscgcappinterface window1.xaml.cs: строка 48 at system.windows.routedeventhandlerinfo.invokehandler (объект Target, routedeventargs routedeventargs) at system.windows. .Invokehandlersimpl (источник объекта, RoutedEventargs Args, Boolean Reraised) в System.Windows.ueelement.RaiseeVeeVITIMPL (отправитель DevingEdObject, RoutedEventArgs args) на System.Windows.Uielement.raiseevent (RoutedEventargs e) windows.controlols.primives. Onclick () at system.windows.controls.button.onclick () at system.windows.controls.primitives.buttonbase.onmouseleftbuttonup (mousebuttoneventargs e) at system.windows.uielement.onmouseleftbutthunkthunk (объект Sender, mousebuttone .Input.MouseButToneVentargs.invokeeventhandler (делегат Generichandler, Object generictarget) на System.Windows.routedEventargs.invokehandler (обработчик делегата, цель объекта) на системе. Windows.RoutedEventhAndlerInfo.invokehandler (объект, объект, routedeventargseventar Invokehandlersimpl (источник объекта, RoutedEventargs Args, Boolean Reraised) в System.Windows.Ueelement.ReraiseeVentas (отправитель DependencyObject, RoutledEventargs Args, RoutedEvent newevent) на System.Windows.Ueelement.crackmousebutEntreantEntReantEntreAreNestOneRemAr .UEELEMENT .OnMouseUpThunk(Object sender, MouseButtonEventArgs e) at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget) at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target) at System.Windows.RoutedEventHandlerInfo.InvokeHandler( Object target, RoutedEventArgs routedEventArgs) at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised) at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args) at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args , Boolean Trusted) at System.Windows.Input.InputManager.processStagingARea () at System.Windows.Input.InputManager.ProcessInput (InputeVentArgs вход) на system.windows.input.inputprovidersite.ReportInput (inputReport) .HwndmouseInputProvider.ReportInput (intptr hwnd, режим inputmode, int32 timeStamp, RawmouseActions, Int32 X, Int32 Y, int32 Wheel) в System.windows.Interop.hwndmouseInputProvider.filtermessage (intptr hwnd, int32 msg, intptrAm, intptrAm, intptrAm, intptrAm, intptrAm, intptrpram. обрабатывается) на system.windows.interop.hwndsource.inputfiltermessage (intptr hwnd, int32 MSG, Intptr Wparam, Intptr LParam, Boolean & Gualean) в Ms.win32.hwndwrapper.wndpr обрабатывается) в Ms.win32.hwndsubclass.dispatchercallbackoperation (Object O) на System.Windows.Threading.ExceptionWrapper.InternalRealLcall (обратный вызов делегата, Object Args, Boolean EssingleParameter) на System.Windows.Threading.ExceptionWrapper.tryCatchwhen (объект -исходный , Object Args, Boolean IssingleParameter, Delegate Catchhandler) в System.Windows.Threading.Dispatcher.WrappedInvoke (Callbact Delegate, Object Args, Boolean IssingleParameter, делегат улово Метод делегата, объект args, boolean issingleparameter) at system.windows.threading.dispatcher.invoke (приоритет диспетчерпиора, метод делегата, объект arg) в Ms.win32.hwndsubclass.subclasswndproc (Intptr hwnd, int32 msg, intptr wparam, intptram) в Ms.win32.unsafenativemethods.dispatchmessage (msg & msg) на system.windows.threading.dispatcher.pushframeimpl (RispatcherFrame Frame) на System.Windows.Threading.Dispatcher.pushframe (рамка диспетчер -фрейма)
at System.Windows.Threading.Dispatcher.Run () at System.Windows.Application.Rundispatcher (объект игнорируется) at System.Windows.Application.Runinternal (окно окна) на System.Windows.Application.Run (окно окна) в системе .Windows.application.run () на wtscgcappinterface.app.main () в C: Documents and Settings Briant My Documents Visual Studio 2008 Projects wtscgcappinterface wtscgcappinterface obj debug app.gs: line 0 at system.appdomain._nexecuteassembly (сборка сборки, строка [] args) at system.appdomain.executeassembly (String Assemblyfile, доказательства Assemblysecurity, String [] args) на microsoft.visualstudio.hostingprocess.hostprocs.runusersembly ()
в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта)
at System.Threading.ExecutionContext.Run (executionContext executionContext, ContextCallback Callback, состояние объекта) на System.Threading.ThreadHelper.ThreadStart ()

Это было полезно?

Решение

Эта ошибка обычно появляется, когда в ваших таблицах отсутствуют столбцы.Поэтому, если у класса есть свойство, сопоставленное со столбцом таблицы, которого нет в базе данных, вы увидите эту ошибку.

В основном проверяйте несоответствия между вашими сопоставлениями и таблицами базы данных (отсутствующие столбцы, несоответствия типов и т. д.).Проблема может быть в связанной таблице/объекте, а не в той, которую вы пытаетесь сохранить.

Другие советы

У меня также была эта проблема, и после нескольких часов поиска в Google я обнаружил, что это проблема с отображением:у меня была колонка с таким же name дважды (в моем случае это были оба <key-property> , как часть <composite-id>, а также столбец в <many-to-one> элемент.я решил поменять <key-property> к <key-many-to-one> и удаление <many-to-one> элемент).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top