2009-04-14 12 views
8

ich die Begegnung mit dem folgenden Fehler habe, wenn eine Sitzung Fabrik zu bauen versuchen:Obscure NHibernate/Fluent NHibernate Fehler

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 

Ich arbeite gegen die FNH Stamm und NH 2.0.1. Lustige Sache ist, ich bin in der Lage, meine Zuordnungen (über AutoPersistenceModel.CompileMappings) zu kompilieren und sie in das Dateisystem erfolgreich zu schreiben - FNH beschwert sich nicht. Es ist nur beim Versuch, die Session-Fabrik zu bauen, die alles geht kaboom mit der nicht sehr hilfreiche Fehlermeldung oben. Wer hat irgendwelche Ideen?

+0

Und die Konfiguration ist ...? – Paco

Antwort

6

Fluent NHibernate selbst klagt selten direkt an Sie. Intern baut es nur Ihre HBM-Dateien für Sie auf. Wenn Sie also etwas falsch machen, wird NHibernate richtig mürrisch.

Wenn Sie nicht bereits sind, möchten Sie vielleicht mit Export Ihrer Mapping-Dateien wie so starten:

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

Dann können Sie graben um in dort zu sehen, ob etwas nicht stimmt. Ich erinnere mich, dass ich diesen Fehler schon einmal bekommen habe, und ich denke, dass es sich um einen Unterschied in der Anzahl der zugeordneten Spalten handelt. Es war einer dieser leicht zu vermissten Fehler in meinem Mapping, also kann ich leider nur vorschlagen, die Ausgabe von ExportTo für alles zu scoren, was keinen Sinn ergibt.

+1

Nach dem Durchforsten von über 90 Mapping-Dateien scheint es, dass FNH keine Spaltennamen für einige Viele-zu-Viele- und Eins-zu-Viele-Beziehungen erzeugte, die ich in Mapping-Überschreibungen (Implementierungen von IAutoMappingOverride) angegeben hatte. Normalerweise wird diese Art von Sachen von Konventionen gehandhabt, aber das waren sie nicht. – Jimit

+6

Für jeden, der auf dieses Problem stößt, scheint FNH Entitäten zuzuordnen, indem zuerst der Auto-Mapper, dann benutzerdefinierte Konventionen, dann Standard-Konventionen und schließlich die Mapping-Überschreibungen verwendet werden. Daher werden Konventionen nicht nach dem Aufruf Ihrer Overrides ausgeführt und Sie müssen explizit sein. – Jimit

1

Wir müssen Ihre Konfiguration sehen, um viel zu helfen. Aber dieser Teil der Stack-Trace sollte Ihnen eine Vorstellung davon geben, wo Sie anfangen sollen.

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

Ich fand, dass die innere Ausnahme mehr Details gab. In meinem Fall musste ich die NHibernate.ByteCode.Castle.dll Datei zu den Referenzen hinzufügen.

Verwandte Themen