After some more investigation, I found that it has something to do
with the fact that Manufacturer is a component. When I use a regular
string then everything works fine. But I still don't have a clue how
to solve this with Manufacturer mapped as a component. Am I missing
something here?



On 28 feb, 21:06, Jan Van Ryswyck <[email protected]> wrote:
> Hi,
>
> I'm getting this weird ArgumentOutOfRangeException whenever 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 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to