FluentNHibernate.MissingConstructorException при создании SessionFactory - PullRequest
1 голос
/ 12 июля 2010

Я пытаюсь свободно настроить SessionFactory для доступа к базе данных Oracle9i, используя ODP.Net, и я получаю это исключение MissingConstructorException. У меня все текущие сопоставления распознаны нормально, но я не уверен, что еще я сделал неправильно.

Вот исключение:

BasicConnectionTests.AssertThatWeCanConnectToADatabase : 

FailedFluentNHibernate.MissingConstructorException: 'FluentNHibernate.Automapping.IAutoClasslike, FluentNHibernate, Version=1.1.0.685, Culture=neutral, PublicKeyToken=8aa435e3cb308880' is missing a parameterless constructor.
at FluentNHibernate.Utils.Extensions.InstantiateUsingParameterlessConstructor(Type type)
at FluentNHibernate.PersistenceModel.Add(Type type)
at FluentNHibernate.Utils.CollectionExtensions.Each<T>(IEnumerable`1 enumerable, Action`1 each)
at FluentNHibernate.PersistenceModel.AddMappingsFromSource(ITypeSource source)
at FluentNHibernate.Cfg.FluentMappingsContainer.Apply(Configuration cfg)
at FluentNHibernate.Cfg.MappingConfiguration.Apply(Configuration cfg)
at FluentNHibernate.Cfg.FluentConfiguration.BuildConfiguration() 
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.BuildConfiguration()
at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory() 
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()
at MyAwesomeApp.sessionFactories.Oracle9SessionFactoryWrapper.Configure(String userName, String passWord, String dataBase) in Oracle9SessionFactoryWrapper.cs: line 26
at MyAwesomeApp.Tests.oracle.BasicConnectionTests.AssertThatWeCanConnectToADatabase() in BasicConnectionTests.cs: line 17

Вот беглое отображение:

public ISessionFactory Configure(string userName, string passWord, string dataBase)
        {
            var config = Fluently.Configure();

            config.Database(
                OracleDataClientConfiguration.Oracle9
                    .ConnectionString(cs => cs.Username(userName).Password(passWord).Instance(dataBase))
                    .Driver("NHibernate.Driver.OracleDataClientDriver")
#if DEBUG
                    .ShowSql()
#endif
                );

            config.Mappings(
                m => m.FluentMappings.AddFromAssembly(Assembly.GetCallingAssembly()));

            return config.BuildSessionFactory();
        }

Если кто-то может указать, где я иду не так, я был бы очень признателен.

1 Ответ

2 голосов
/ 12 июля 2010

Как отметил Джеймс Грегори в своем комментарии на мой вопрос, я делал что-то действительно глупое, когда информировал Fluent о том, что мои отображения были.

Когда код выполнялся из контекста модульного теста, m => m.FluentMappings.AddFromAssembly(Assembly.GetCallingAssembly())попытался сказать Fluent, чтобы он смотрел в сборках модульного теста на соответствие - что с треском провалится.

Ответ - использовать m => m.FluentMappings.AddFromAssemblyOf<Foo>(), где Foo - это тип в сборке, в которой отображаются.

...