2009-04-14 21 views
8

he estado encontrando el siguiente error al intentar construir una fábrica sesión:oscuro de error NHibernate/Fluido NHibernate

PersistenceTests.Can_Map_Orders_To_Database : Failed 
System.IndexOutOfRangeException: Index was outside the bounds of the 
array. 
at NHibernate.Mapping.Column.set_Name(String value) 
at NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindColumns(XmlNode node, 
SimpleValue model, Boolean isNullable, Boolean autoColumn, String 
propertyPath) 
at NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindColumnsOrFormula 
(XmlNode node, SimpleValue simpleValue, String path, Boolean 
isNullable) 
at NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindSimpleValue(XmlNode 
node, SimpleValue model, Boolean isNullable, String path) 
at 
NHibernate.Cfg.XmlHbmBinding.CollectionBinder.BindCollectionSecondPass 
(XmlNode node, Collection model, IDictionary`2 persistentClasses) 
at 
NHibernate.Cfg.XmlHbmBinding.CollectionBinder.<>c__DisplayClassd.<AddCollec tionSecondPass>b__c 
(IDictionary`2 persistentClasses) 
at NHibernate.Cfg.Configuration.SecondPassCompile() 
at NHibernate.Cfg.Configuration.BuildSessionFactory() 
at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in c: 
\Code Samples\NHibernate\Fluent Nhibernate - Trunk\src\FluentNHibernate 
\Cfg\FluentConfiguration.cs: line 94 
FluentNHibernate.Cfg.FluentConfigurationException: An invalid or 
incomplete configuration was used while creating a SessionFactory. 
Check PotentialReasons collection, and InnerException for more detail. 
at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in c: 
\Code Samples\NHibernate\Fluent Nhibernate - Trunk\src\FluentNHibernate 
\Cfg\FluentConfiguration.cs: line 99 
at FluentNHibernate.SessionSource..ctor(FluentConfiguration config) in 
c:\Code Samples\NHibernate\Fluent Nhibernate - Trunk\src 
\FluentNHibernate\SessionSource.cs: line 38 
at 
FluentNHibernate.Testing.SingleConnectionSessionSourceForSQLiteInMemoryTest ing..ctor 
(FluentConfiguration config) in c:\Code Samples\NHibernate\Fluent 
Nhibernate - Trunk\src\FluentNHibernate\Testing 
\SingleConnectionSessionSourceForSQLiteInMemoryTesting.cs: line 15 
at Core.Infrastructure.Data.NHibernate.Tests.PersistenceTests.SetUp() 
in PersistenceTests.cs: line 26 

estoy trabajando en el tronco FNH y NH 2.0.1. Lo gracioso es que soy capaz de compilar mis mapeos (a través de AutoPersistenceModel.CompileMappings) y escribirlos en el sistema de archivos con éxito - FNH no se queja. Es solo cuando se intenta construir la fábrica de sesiones que todo vale kaboom con el mensaje de error no muy útil anterior. ¿Alguien tiene alguna idea?

+0

Y la configuración es ...? – Paco

Respuesta

6

Fluido sí NHibernate rara vez se queja a usted directamente. Internamente, solo está compilando sus archivos HBM para usted, así que si le dice que genere algo incorrecto, NHibernate se pondrá gruñón.

Si aún no se encuentra, es posible que desee comenzar con la exportación de sus archivos de mapeo de este modo:

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyClass>() 
    .ExportTo("path") 

Entonces se puede sacar por allí para ver si algo está mal. Recuerdo que obtuve este error una vez y creo que se relaciona con una falta de coincidencia en el número de columnas asignadas. Fue uno de esos errores fáciles de omitir en mi mapeo, así que desafortunadamente todo lo que puedo sugerir es buscar en la salida de ExportTo todo lo que no tenga sentido.

+1

Después de eliminar aproximadamente 90+ archivos de asignación, parece que FNH no generaba nombres de columna para algunas relaciones de muchos a muchos y de uno a muchos que había especificado en las modificaciones de asignación (implementaciones de IAutoMappingOverride). Usualmente ese tipo de cosas son manejadas por convenciones, pero no lo fueron. – Jimit

+6

Para cualquier otra persona que se encuentre con este problema, FNH parece mapear entidades usando primero el automapper, luego las convenciones definidas por el usuario, luego las convenciones predeterminadas y finalmente las anulaciones de su asignación. Por lo tanto, las convenciones no se ejecutarán después de llamar a las anulaciones y, por lo tanto, debe ser explícito. – Jimit

1

Tendremos que ver su configuración para ayudar mucho. Pero esta parte del seguimiento de la pila debería darle una idea de por dónde empezar.

at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() in c: 
\Code Samples\NHibernate\Fluent Nhibernate - Trunk\src\FluentNHibernate 
\Cfg\FluentConfiguration.cs: line 94 
FluentNHibernate.Cfg.FluentConfigurationException: An invalid or 
incomplete configuration was used while creating a SessionFactory. 
Check PotentialReasons collection, and InnerException for more detail. 
13

Encontré que la excepción interna proporcionaba más detalles. En mi caso, tuve que agregar el archivo NHibernate.ByteCode.Castle.dll a las referencias.

Cuestiones relacionadas