usiłuję mapować relacji nadrzędny podrzędny między obiektu osoba i obiektu organizacja FluentNhibernate pomocą odwołań w pliku odwzorowania tak:FluentNhibernate Mapowanie Korzystanie Referencje Index Out of Range podczas dodawania nowego obiektu
Odniesienia (x => x.Organizacja);
Relacja jest obiektem Person zawiera kolumnę OrganizationId, która odpowiada rekordowi w tabeli Organization z odpowiednim ID OrganizationId. Różne rekordy osób mogą należeć do tej samej organizacji.
Po pobraniu obiektu Person działa poprawnie. Person.Organizacja jest wypełniona. Mogę zapisać obiekt Person i działa on poprawnie. Jednak przy próbie dodania nowego obiektu Person otrzymuję wyjątek Index Out of Range od NHibernate. Wyjątek występuje podczas wywoływania session.SaveOrUpdate (osoba). Próbowałem zmienić mapowanie do:
Odniesienia (x => x.Organization) .Cascade.None()
wciąż ten sam błąd. Nie wiem, co powoduje wyjątek. Pełny wyjątek jest następujący:
System.IndexOutOfRangeException: Niepoprawny indeks 22 dla tego SqlParameterCollection z Count = 22. w System.Data.SqlClient.SqlParameterCollection.RangeCheck (indeks Int32) w System.Data.SqlClient.SqlParameterCollection.GetParameter (indeks Int32) w System.Data.Common.DbParameterCollection.System.Collections.IList.get_Item (Indeks Int32) w NHibernate.Type.NullableType.NullSafeSet (IDbCommand cmd wartość obiektu, indeks Int32) w NHibernate.Type.ManyToOneType.NullSafeSet (IDbCommand st, wartość obiektu, indeks Int32, logiczna [] ustawiane, ISessionImplementor sesji) w NHibernate .Persister.Entity.AbstractEntityPersister.Dehydrate (identyfikator obiektu, pola Object [], Object rowId, Boolean [] includeProperty, Boolean [] [] includeColumns, tabela Int32, instrukcja IDbCommand, sesja ISessionImplementor, indeks Int32) w NHibernate.Persister. Entity.AbstractEntityPersister.GeneratedIdentifierBin der.BindValues (IDbCommand ps) w NHibernate.Id.Insert.AbstractReturningDelegate.PerformInsert (SqlCommandInfo insertSQL, sesja ISessionImplementor, segregator IBinder) w NHibernate.Persister.Entity.AbstractEntityPersister.Insert (pola Object [], Boolean [] notNull, SqlCommandInfo SQL Object obj sesja ISessionImplementor) w NHibernate.Persister.Entity.AbstractEntityPersister.Insert ([] obszary, obj Przedmiot session Object) ISessionImplementor w NHibernate.Action.EntityIdentityInsertAction.Execute() w NHibernate.Engine.ActionQueue .Execute (IExecutable executable) w NHibernate.Event.Default.AbstractSaveEventListener.PerformSaveOrReplicate (Obiekt obiektu, klucz EntityKey, IEntityPersister persister, Boolean useIdentityColumn, Object anything, źródło IEventSource, Boolean requiresImmediateIdAccess) na NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId (podmiot Object, String entityName, obiekt czegokolwiek, źródło IEventSource, Boolean requiresImmediateIdAccess) w NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId (zdarzenie SaveOrUpdateEvent) na NHibernate.Event.Default. DefaultSaveOrUpdateEventListener.EntityIsTransient (zdarzenie SaveOrUpdateEvent) w NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate (zdarzenie SaveOrUpdateEvent) w NHibernate.Impl.SessionImpl.FireSaveOrUpdate (zdarzenie SaveOrUpdateEvent) w NHibernate.Impl.SessionImpl.SaveOrUpdate (Object obj)
Nie mogę ustalić przyczyny wyjątku, ponieważ nie wysłano kodu powodującego wyjątek. (klasy encji/mapowania) – Paco
Właśnie dodałem trochę tekstu do pytania. Występuje podczas wywoływania session.SaveOrUpdate (osoba) , gdy obiekt osoby jest nową osobą, która nie istnieje w bazie danych. – Jeff
Czy wcześniej wstawiono jednostkę nadrzędną? – mxmissile