Fleunt NHibernate не работает за пределами тестовых устройств nunit - PullRequest
1 голос
/ 23 марта 2010

Хорошо, вот моя проблема ...

Я создал Уровень данных, используя RTM Fluent Nhibernate. Мой код создания сеанса выглядит так:

_session = Fluently.Configure().
Database(SQLiteConfiguration.Standard.UsingFile("Data.s3db"))                   
                        .Mappings( m =>
                        {
                         m.FluentMappings.AddFromAssemblyOf<ProductMap>();
                         m.FluentMappings.AddFromAssemblyOf<ProductLogMap>();
                        })
                        .ExposeConfiguration(BuildSchema)
                        .BuildSessionFactory();

Когда я ссылаюсь на модуль в тестовом проекте, то создаю тестовое устройство, которое выглядит примерно так:

    [Test]
    public void CanAddProduct()
    {
        var product = new Product {Code = "9", Name = "Test 9"};
        IProductRepository repository = new ProductRepository();

        repository.AddProduct(product);

        using (ISession session = OrmHelper.OpenSession())
        {
            var fromDb = session.Get<Product>(product.Id);

            Assert.IsNotNull(fromDb);
            Assert.AreNotSame(fromDb, product);
            Assert.AreEqual(fromDb.Id, product.Id);
        }

Мои тесты пройдены. Когда я открываю созданную базу данных SQLite, в ней новый продукт с кодом 9. таблицы для Product и ProductLog есть.

Теперь, когда я создаю новое консольное приложение и ссылаюсь на ту же библиотеку, сделайте что-то вроде этого:

        Product product = new Product() {Code = "10", Name = "Hello"};
        IProductRepository repository = new ProductRepository();
        repository.AddProduct(product);

        Console.WriteLine(product.Id);

        Console.ReadLine();

Это не работает. Я на самом деле получаю довольно неприятную цепь исключений. Чтобы сэкономить много головных болей, вот краткое изложение:

Исключение верхнего уровня:

При создании SessionFactory использовалась неверная или неполная конфигурация. Проверьте коллекцию PotentialReasons и InnerException для получения более подробной информации. \ R \ n \ r \ n

Коллекция PotentialReasons пуста

Внутреннее исключение:

Не удалось найти реализацию IDbCommand и IDbConnection в сборке System.Data.SQLite. Убедитесь, что сборка System.Data.SQLite находится в каталоге приложения или в глобальном кэше сборок. Если сборка находится в GAC, используйте элемент в файле конфигурации приложения, чтобы указать полное имя сборки.

И библиотека модульного тестирования, и консольное приложение ссылаются на одну и ту же версию System.Data.SQLite. Оба проекта имеют одинаковые библиотеки DLL в папке отладки. Я даже попытался скопировать базу данных SQLite из библиотеки модульных тестов, созданной в каталог отладки консольного приложения, и удалил строки схемы сборки, но она все еще не работает

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

1 Ответ

2 голосов
/ 23 марта 2010

Если вы работаете в 64x ОС, попробуйте установить опцию компиляции на x86.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...