Good catch! On Fri, Mar 6, 2009 at 9:26 PM, Jan Van Ryswyck <jan.van.rysw...@gmail.com>wrote:
> > I found the solution to this problem which resulted from my own > stupidity in the first place. It all became clear to me as soon as I > generated the hbm files from the fluent NH mapping. > > <class name="CatalogItem" table="`CatalogItem`" xmlns="urn:nhibernate- > mapping-2.2" optimistic-lock="version"> > ... > > <property name="Name" length="100" type="String"> > <column name="Name" /> > </property> > > ... > > <component name="Manufacturer" insert="false" update="true"> > <property name="Name" length="100" type="String"> > <column name="Name" /> > </property> > </component> > </class> > > Notice that the column for the Name property and the column for the > Manufacturer component are both mapped to the same column. That's why > this resulted into an ArgumentOutOfRangeException, because there were > more arguments than there were column names. I solved this by > explicitely specifying a column name for the component mapping: > > Component(catalogItem => catalogItem.Manufacturer, > m => m.Map(manufacturer => manufacturer.Name, > "Manufacturer")); > > Another lesson learned. > > On 28 feb, 01:04, Jan Van Ryswyck <jan.van.rysw...@gmail.com> wrote: > > Hi, > > > > I'm getting this weirdArgumentOutOfRangeExceptionwhenever I use the > > PersitenceSpecification class for verifying an entity that has a > > reference to a value object. > > > > public class CatalogItem : DomainEntity > > { > > internal virtual Manufacturer Manufacturer { get; private > > set; } > > internal virtual String Name { get; private set; } > > > > protected CatalogItem() > > {} > > > > public CatalogItem(String name, String manufacturer) > > { > > Name = name; > > Manufacturer = new Manufacturer(manufacturer); > > } > > } > > > > public class CatalogItemMapping : ClassMap<CatalogItem> > > { > > public CatalogItemMapping() > > { > > Id(catalogItem => catalogItem.Id); > > > > Component<Manufacturer>(category => category.Manufacturer, > > m => m.Map(manufacturer => > > manufacturer.Name)); > > > > Map(catalogItem => catalogItem.Name); > > Map(Reveal.Property<CatalogItem>("Price")); > > } > > } > > > > [TestFixture] > > public class When_verifying_the_class_mapping_of_a_catalog_item > > : NHibernateSpecification > > { > > [Test] > > public void Then_a_catalog_object_should_be_persistable() > > { > > new PersistenceSpecification<CatalogItem>(Session) > > .VerifyTheMappings(); > > } > > } > > > > [TestFixture] > > public class NHibernateSpecification > > : Specification > > { > > protected ISession Session { get; private set; } > > > > protected override void Establish_context() > > { > > var configuration = new SQLiteConfiguration() > > .InMemory() > > .ShowSql() > > .ToProperties(); > > > > var sessionSource = new SessionSource(configuration, new > > RetailerPersistenceModel()); > > Session = sessionSource.CreateSession(); > > > > sessionSource.BuildSchema(Session); > > ProvideInitialData(Session); > > > > Session.Flush(); > > Session.Clear(); > > } > > > > protected override void Dispose_context() > > { > > Session.Dispose(); > > Session = null; > > } > > > > protected virtual void ProvideInitialData(ISession session) > > {} > > } > > > > Here's the error I'm getting: > > > > TestCase 'Then_a_catalog_object_should_be_persistable' > > not executed: System.ArgumentOutOfRangeException: Index was out of > > range. Must be non-negative and less than the size of the collection. > > Parameter name: index > > at System.ThrowHelper.ThrowArgumentOutOfRangeException > > (ExceptionArgument argument, ExceptionResource resource) > > at System.ThrowHelper.ThrowArgumentOutOfRangeException() > > at System.Collections.Generic.List`1.get_Item(Int32 index) > > at > System.Data.SQLite.SQLiteParameterCollection.GetParameter(Int32 > > index) > > at > > > System.Data.Common.DbParameterCollection.System.Collections.IList.get_Item > > (Int32 index) > > at NHibernate.Type.GuidType.Set(IDbCommand cmd, Object value, > Int32 > > index) > > at NHibernate.Type.NullableType.NullSafeSet(IDbCommand cmd, > Object > > value, Int32 index) > > at NHibernate.Type.NullableType.NullSafeSet(IDbCommand st, Object > > value, Int32 index, ISessionImplementor session) > > at NHibernate.Persister.Entity.AbstractEntityPersister.Dehydrate > > (Object id, Object[] fields, Object rowId, Boolean[] includeProperty, > > Boolean[][] includeColumns, Int32 table, IDbCommand statement, > > ISessionImplementor session, Int32 index) > > at > NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object > > id, Object[] fields, Boolean[] notNull, Int32 j, SqlCommandInfo sql, > > Object obj, ISessionImplementor session) > > at > NHibernate.Persister.Entity.AbstractEntityPersister.Insert(Object > > id, Object[] fields, Object obj, ISessionImplementor session) > > at NHibernate.Action.EntityInsertAction.Execute() > > at NHibernate.Engine.ActionQueue.Execute(IExecutable executable) > > at NHibernate.Engine.ActionQueue.ExecuteActions(IList list) > > at NHibernate.Engine.ActionQueue.ExecuteActions() > > at > > NHibernate.Event.Default.AbstractFlushingEventListener.PerformExecutions > > (IEventSource session) > > at NHibernate.Event.Default.DefaultFlushEventListener.OnFlush > > (FlushEvent event) > > at NHibernate.Impl.SessionImpl.Flush() > > at NHibernate.Transaction.AdoTransaction.Commit() > > d:\Builds\FluentNH\src\FluentNHibernate\Testing > > \PersistenceSpecification.cs(127,0): at > > FluentNHibernate.Testing.PersistenceSpecification`1.TransactionalSave > > (Object propertyValue) > > d:\Builds\FluentNH\src\FluentNHibernate\Testing > > \PersistenceSpecification.cs(105,0): at > > FluentNHibernate.Testing.PersistenceSpecification`1.VerifyTheMappings > > () > > C:\Source\SupplyChain\Tests\Retailer.IntegrationTests\Mappings > > \CatalogItemMappingSpecifications.cs(14,0): at > > > SupplyChain.Retailer.IntegrationTests.Mappings.When_verifying_the_class_mapping_of_a_catalog_item.Then_a_catalog_object_should_be_persistable > > () > > > > Sorry for the long post, but this one got me busy for a couple of > > hours now. This might not be caused by FNH as I found this JIRA ticket > > of NH itself that mentions something similar: > > > > http://forum.hibernate.org/viewtopic.php?p=2395409 > > > > I'm still hoping that I'm doing something wrong in my code :-). Any > > thought? > > > > Thanks in advance > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Fluent NHibernate" group. To post to this group, send email to fluent-nhibernate@googlegroups.com To unsubscribe from this group, send email to fluent-nhibernate+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/fluent-nhibernate?hl=en -~----------~----~----~----~------~----~------~--~---