2009-04-14 11 views
8

セッションファクトリ構築しようとしたとき、私は次のようなエラーに遭遇してきた:あいまいなNHibernateは/流暢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 

を私はFNHトランクとNH 2.0.1に対して働いています。面白いのは、 (私のマッピングをAutoPersistenceModel.CompileMappings経由で) をコンパイルしてファイルシステムに正常に書き込めることです.FNHは文句を言わない。 すべてが上記のあまり役に立たないエラーメッセージでkaboomになるというセッションファクトリを構築しようとするときだけです。 誰でもアイデアがありますか?

+0

設定は...ですか? – Paco

答えて

6

流暢NHibernateは、それ自体はほとんど直接あなたに文句を言いません。内部的にはHBMファイルを構築しているだけなので、何か間違ったものを作成するように言えば、NHibernateの適切な処理がうまくいきません。

既にいない場合、あなたはそうのようなマッピングファイルをエクスポートすると起動する場合があります

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

その後、あなたは何かが間違っているかどうかを確認するためにそこに周りを掘ることができます。以前このエラーが発生したことを思い出しました。マッピングされた列数の不一致に関係していると思います。私のマッピングでは、それは見逃しやすいエラーの1つでした。残念ながら、私が示唆できるのは、実際にはExportToの出力を精査して意味をなさないものを探すことです。

+1

マッピングのオーバーライド(IAutoMappingOverrideの実装)で指定した多対多および一対多の関係で、FNHが列名を生成していないようです。通常、その種のものは慣例によって処理されますが、そうではありません。 – Jimit

+6

この問題に遭遇した他の人にとって、FNHは最初にautomapperを使用してエンティティをマッピングし、次にユーザー定義の規則、次にデフォルトの規則、そして最後にマッピングの上書きを使用しているようです。したがって、オーバーライドを呼び出した後ではコンベンションは実行されないため、明示的にする必要があります。 – Jimit

1

多くの場合、設定を参照する必要があります。しかし、スタックトレースのこの部分は、どこから始めるべきかを知るはずです。

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

私は、内部例外が詳細を示していることがわかりました。私の場合、NHibernate.ByteCode.Castle.dllファイルを参照に追加する必要がありました。