模糊的NHibernate/Fluent NHibernate错误

Jim*_*mit 8 nhibernate fluent-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
Run Code Online (Sandbox Code Playgroud)

我正在对抗FNH主干和NH 2.0.1.有趣的是我能够编译我的映射(通过AutoPersistenceModel.CompileMappings)并将它们成功写入文件系统 - FNH不会抱怨.只有在尝试构建会话工厂时,所有内容都会变成kaboom,并且上面没有非常有用的错误消息.有人有任何想法吗?

Fra*_*tha 13

我发现内部异常提供了更多细节.在我的情况下,我不得不将NHibernate.ByteCode.Castle.dll文件添加到引用.


Stu*_*lds 6

流利的NHibernate本身很少直接向你抱怨.在内部,它只是为你构建你的HBM文件,所以如果你告诉它构建错误的话,那么NHibernate本身就会变得脾气暴躁.

如果您还没有,可能需要从导出映射文件开始,如下所示:

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyClass>()
    .ExportTo("path")
Run Code Online (Sandbox Code Playgroud)

然后你可以在那里挖掘,看看是否有问题.我记得曾经有过这样的错误,我认为这与映射的列数不匹配有关.这是我的映射中容易错过的错误之一,所以不幸的是我所能建议的是真正地搜索ExportTo任何没有意义的输出.

  • 对于遇到此问题的任何其他人,FNH似乎首先使用automapper,然后是用户定义的约定,然后是默认约定以及最后的映射覆盖来映射实体.因此,在调用覆盖后将不会执行约定,因此您必须明确. (6认同)