Получение Fluent NHibernate для работы с SQLite
Я уверен, что есть что-то простое, чего я не делал, но я пытаюсь заставить Fluent NHibernate работать с Sqlite на моей машине.
Я использовал NuGet для бесплатного скачивания nhibernate и добавил следующую сущность и отображение:
public class Customer
{
public virtual string CustomerCode { get; set; }
public virtual string Name { get; set; }
}
public class CustomerMap : ClassMap<Customer>
{
public CustomerMap ()
{
Id(x => x.CustomerCode);
Map(x => x.Name);
Table("tblCustomer");
}
}
Затем, после начала бесплатного руководства, я добавил следующий код в проект Windows Command:
class Program
{
static void Main(string[] args)
{
var sessionFactory = CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var customer = new Customer { CustomerCode = "123", Name = "Bob" };
session.SaveOrUpdate(customer);
transaction.Commit();
}
}
}
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(
SQLiteConfiguration.Standard
.UsingFile("firstProject.db")
)
.Mappings(m =>
m.FluentMappings.AddFromAssemblyOf<Program>())
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
private static void BuildSchema(Configuration config)
{
// delete the existing db on each run
if (File.Exists("firstProject.db"))
File.Delete("firstProject.db");
// this NHibernate tool takes a configuration (with mapping info in)
// and exports a database schema from it
new SchemaExport(config)
.Create(false, true);
}
}
Наконец, я добавил dll Sqlite с помощью NuGet.. однако при попытке запустить программу я получаю следующую ошибку:
Верхнее исключение:
An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
Следующее исключение:
Could not create the driver from NHibernate.Driver.SQLite20Driver, NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4.
Внутреннее большинство исключений:
Unable to find the requested .Net Framework Data Provider. It may not be installed.
Это когда он пытается создать сеанс factory.
Может ли кто-нибудь помочь с этим? Я запускаю 32-битную машину?
Спасибо
Dave
Ответы
Ответ 1
Вам нужны две вещи:
- Ссылка
System.Data.SQLite
в вашем проекте.
- Включить
sqlite3.dll
, но вы также можете добавить ссылку на sqlite3.dll, потому что это неуправляемая dll. Просто добавьте его как элемент в решение и установите для его копирования в выходной каталог.
Ответ 2
Вам нужен поставщик .NET для Sqlite. Загрузите его здесь http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
Ответ 3
После первоначального исследования я подумал, что это связано с тем, что в то время моя сборка System.Data.SQLite не была загружена в память, поэтому я включил код для предварительной загрузки сборки system.Data.SQLite. Однако при запуске приложения возникла реальная ошибка:
Сборка смешанного режима построена по сравнению с версией "v2.0.50727" среды выполнения и не может быть загружена в среду выполнения 4.0 без дополнительной информации о конфигурации.
чтобы исправить это, я изменил свой app.config, чтобы выглядеть следующим образом:
<?xml version="1.0"?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
с важным битом useLegacyV2RuntimeActivationPolicy = "true"
Ответ 4
Сегодня у меня была такая же проблема, и я потратил час на поиск решения. Во всяком случае, я нашел его здесь:
http://thelongwayback.wordpress.com/2009/11/02/fluent-nhibernate-sqlite-problem-the-idbcommand-and-idbconnection-implementation-in-the-assembly-system-data-sqlite-could-not-be-found/
В принципе, вам придется использовать более старую версию SQLite (v1.0.60) отсюда:
http://sourceforge.net/projects/sqlite-dotnet2/files/
В другой заметке я получил тот же код, который работал вчера на машине с VS2010 SP1. Тот же код не будет работать сегодня на машине без SP1. Если кто-то получит шанс протестировать этот, то есть, установив VS2010 SP1, дайте мне знать результат, пожалуйста.
Ответ 5
Ни одно из вышеперечисленных решений, или любое другое, что я мог найти в Интернете, не работало для меня... до тех пор, пока...
Мне пришлось установить как x64, так и x86 версии SQLite (по ссылке Vadim: http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki), в частности заказ.
Первоначально я установил 32-разрядную версию перед 64-разрядной версией, которая ничего не исправить. По прихоти я удалил их обоих и переустановил их в обратном порядке. Теперь он работает!
Я тестировал это на двух разных машинах и проверял, что это было исправление для обоих из них. Ужасно, но эффективно.
Ответ 6
Я также столкнулся с этой проблемой.
Заметил, что проект образца стартера нацелен на .net framework 3.5, а тот, который я создал (проект упражнений), нацелен на профиль клиента .net framework 4.0 (по умолчанию vs2010).
Я изменил целевую версию на 3.5, и я смог работать над моим проектом упражнений.
Ответ 7
В моем случае это помогло установить System.Data.SqLite через NuGet.
Поэтому я открыл "Инструменты/Диспетчер пакетов NuGet/Консоль диспетчера пакетов" и набрал:
Install-Package System.Data.SqLite