Хорошо, вот моя проблема ...
Я создал Уровень данных, используя 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 из библиотеки модульных тестов, созданной в каталог отладки консольного приложения, и удалил строки схемы сборки, но она все еще не работает
Если кто-нибудь может помочь мне понять, почему это не сработает за пределами моих модульных тестов, это было бы очень признательно. Эта сумасшедшая ошибка заставляет меня стоять на месте.