晦涩的NHibernate/Fluent NHibernate错误

8

当尝试构建会话工厂时,我一直遇到以下错误:

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 trunk和NH 2.0.1。有趣的是,我能够编译我的映射(通过AutoPersistenceModel.CompileMappings)并成功地将它们写入文件系统 - FNH没有抱怨。只有在构建会话工厂时,一切才会随着上面不太有用的错误消息而崩溃。有人有什么想法吗?

3个回答

13

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


6

Fluent NHibernate本身很少直接向您抱怨。在内部,它只是为您构建HBM文件,因此如果您告诉它构建错误的内容,则NHibernate本身会变得暴躁。

如果您还没有这样做,您可能希望从以下方式开始导出映射文件:

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

然后你可以深入检查一下,看看是否有什么问题。我记得以前也遇到过这个错误,我想它与映射的列数不匹配有关。这是一种容易被忽视的映射错误,所以很遗憾,我只能建议您仔细检查ExportTo 的输出,看看是否有任何不合理之处。

1
在翻阅了90多个映射文件之后,我发现FNH并没有为我在映射覆盖中指定的一对多和多对多关系生成列名。通常这种事情都由约定处理,但是这次却没有。 - Jimit
6
对于任何遇到这个问题的人,FNH 似乎使用自动映射器、用户定义的约定、默认约定和最后是您的映射覆盖来映射实体。因此,在调用您的覆盖之后将不执行公约,因此您必须明确指定。 - 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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接