Я получаю «ArgumentOutOfRangeException» по индексу параметра всякий раз, когда пытаюсь создать экземпляр фабрики сеансов в nHibernate. Ошибка происходит из-за процедуры глубоко в недрах nHibernate. Я могу опубликовать трассировку стека ошибки, если это поможет.
Это новый проект с довольно простой трехуровневой архитектурой. Уровень данных отображает классы nHibernate на простые интерфейсы, которые реализуются бизнес-уровнем. В настоящее время nHibernate использует только один набор интерфейсов и файл отображения. Надеюсь, мою проблему легко обнаружить.
Вот функция, где я создаю sessionFactory.
Private Shared Function SessionFactory() As ISessionFactory
If _sessionFactory Is Nothing Then
Dim config As New NHibernate.Cfg.Configuration
config.Configure()
config.AddClass(GetType(ICompanyProperty))
_sessionFactory = config.BuildSessionFactory
End If
Return _sessionFactory
End Function
Вот мой hibernate.cfg.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">
NHibernate.Connection.DriverConnectionProvider
</property>
<property name="dialect">
NHibernate.Dialect.MsSql2005Dialect
</property>
<property name="connection.driver_class">
NHibernate.Driver.SqlClientDriver
</property>
<property name="connection.connection_string">
Data Source=dataserver.domain.ad;Initial Catalog=LABs;Integrated Security=SSPI
</property>
</session-factory>
</hibernate-configuration>
И файл сопоставления интерфейса, который я сопоставляю.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Sample.Data" namespace="Sample.Data">
<class name="ICompanyProperty" table="CompanyProperty">
<id name="CompanyPropertyID" column="CompanyPropertyID">
<generator class="native" />
</id>
<discriminator column="PropertyType" type="String" />
<property name="CompanyID" />
<property name="PropertyName" />
<subclass discriminator-value="SQL" name="ISQLLookupCompanyProperty">
<property name="TableName" />
<property name="KeyField" />
<property name="ValueField" />
<property name="ConnectionString" />
</subclass>
<subclass discriminator-value="LIST" name="ILookupCompanyProperty" />
</class>
</hibernate-mapping>
И интерфейсы
Public Interface ICompanyProperty
Property CompanyPropertyID() As Integer
Property PropertyName() As String
Property CompanyID() As Integer
Property PropertyType() As String
End Interface
Public Interface ILookupCompanyProperty
Inherits ICompanyProperty
End Interface
Public Interface ISQLLookupCompanyProperty
Inherits ILookupCompanyProperty
Property TableName() As String
Property KeyField() As String
Property ValueField() As String
Property ConnectionString() As String
End Interface
Спасибо!
Редактировать: трассировка стека была запрошена. здесь это от моего вызова фабрики сеанса сборки до ошибки.
at System.Collections.ArrayList.get_Item(Int32 index)
at NHibernate.SqlCommand.InFragment.ToFragmentString()
at NHibernate.Persister.Entity.SingleTableEntityPersister.DiscriminatorFilterFragment(String alias)
at NHibernate.Persister.Entity.SingleTableEntityPersister.FilterFragment(String alias)
at NHibernate.Persister.Entity.AbstractEntityPersister.FilterFragment(String alias, IDictionary`2 enabledFilters)
at NHibernate.Loader.Entity.EntityJoinWalker..ctor(IOuterJoinLoadable persister, String[] uniqueKey, Int32 batchSize, LockMode lockMode, ISessionFactoryImplementor factory, IDictionary`2 enabledFilters)
at NHibernate.Loader.Entity.EntityLoader..ctor(IOuterJoinLoadable persister, String[] uniqueKey, IType uniqueKeyType, Int32 batchSize, LockMode lockMode, ISessionFactoryImplementor factory, IDictionary`2 enabledFilters)
at NHibernate.Loader.Entity.EntityLoader..ctor(IOuterJoinLoadable persister, Int32 batchSize, LockMode lockMode, ISessionFactoryImplementor factory, IDictionary`2 enabledFilters)
at NHibernate.Loader.Entity.EntityLoader..ctor(IOuterJoinLoadable persister, LockMode lockMode, ISessionFactoryImplementor factory, IDictionary`2 enabledFilters)
at NHibernate.Loader.Entity.BatchingEntityLoader.CreateBatchingEntityLoader(IOuterJoinLoadable persister, Int32 maxBatchSize, LockMode lockMode, ISessionFactoryImplementor factory, IDictionary`2 enabledFilters)
at NHibernate.Persister.Entity.AbstractEntityPersister.CreateEntityLoader(LockMode lockMode, IDictionary`2 enabledFilters)
at NHibernate.Persister.Entity.AbstractEntityPersister.CreateEntityLoader(LockMode lockMode)
at NHibernate.Persister.Entity.AbstractEntityPersister.CreateLoaders()
at NHibernate.Persister.Entity.AbstractEntityPersister.PostInstantiate()
at NHibernate.Persister.Entity.SingleTableEntityPersister.PostInstantiate()
at NHibernate.Impl.SessionFactoryImpl..ctor(Configuration cfg, IMapping mapping, Settings settings, EventListeners listeners)
at NHibernate.Cfg.Configuration.BuildSessionFactory()
Edit2: когда я удаляю дискриминатор, я больше не получаю эту ошибку. Разве я не делаю это правильно?
Редактировать 3: Когда я загружаю исходный код для nHibernate, собираю его самостоятельно, связываюсь с выводом отладки и запускаю его, я получаю совершенно другую ошибку о том, что ProxyFactoryFactory не настроен.