Получение свободного NHibernate для работы с SQLite - PullRequest
10 голосов
/ 14 апреля 2011

Я уверен, что есть кое-что простое, что я еще не сделал, но я пытаюсь заставить Fluent NHibernate работать с Sqlite на моей машине.

Я использовал NuGet для загрузки Fluent 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);
    }
}

Наконец, я добавил Sqlite dll, используя 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.

Это когда он пытается создать фабрику сессий.

Может кто-нибудь помочь с этим?Я использую 32-битную машину?

Спасибо

Дейв

Ответы [ 7 ]

12 голосов
/ 15 апреля 2011

Вам нужны две вещи:

  1. Ссылка System.Data.SQLite в вашем проекте.
  2. Включите sqlite3.dll, но вы также не можете добавить ссылку на sqlite3.dll, потому чтоэто неуправляемая DLL.Просто добавьте его как элемент в решение и установите его для копирования в выходной каталог.
5 голосов
/ 29 ноября 2011

После первоначального исследования я подумал, что это потому, что моя сборка 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"

5 голосов
/ 14 апреля 2011

Вам нужен поставщик .NET для Sqlite. Скачать здесь http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

1 голос
/ 19 марта 2013

Ни одно из перечисленных выше решений или какие-либо другие, которые я мог найти в Интернете, не работало для меня ... пока ...

Мне пришлось установить версии SQLite для x64 и x86 (по ссылке Вадима: http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki), специально в таком порядке.

Изначально я установил 32-битную версию до 64-битной версии, которая ничего не исправила. По какой-то причине я удалил их обоих и переустановил в обратном порядке. Теперь это работает!

Я проверил это на 2 разных машинах и убедился, что это исправление для них обоих. Дурацкий, но эффективный.

1 голос
/ 24 мая 2011

У меня была такая же проблема сегодня, и я потратил час на поиск решения.Во всяком случае, я нашел здесь:

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, сообщите мне, пожалуйста, результат.

0 голосов
/ 12 июля 2019

В моем случае это помогло установить System.Data.SqLite через NuGet.

Итак, я открыл «Инструменты / Диспетчер пакетов NuGet / Консоль диспетчера пакетов» и набрал:

Install-Package System.Data.SqLite

0 голосов
/ 23 мая 2012

Я также столкнулся с этой проблемой.
Заметил, что начальный пример проекта нацелен на .net framework 3.5 , а тот, который я создал (проект упражнения), нацелен на .net framework 4.0 .профиль клиента (по умолчанию vs2010).
Я изменил целевую версию на 3,5, и я смог работать над своим проектом упражнений.

...