Попытка использования Nhibernate с Mono & SQLite - не удается найти System.Data.SQLite - PullRequest
7 голосов
/ 01 июня 2011

Я написал простое приложение на моно (C #), которое использует NHibernate с MYSQL - и теперь я хочу перенести его на SQLite.

Я надеюсь (был), что мог бы просто изменить hibernate.cfg.XML и указать его в другую базу данных.Вот мой измененный файл hibernate.cfg.xml:

    <?xml version="1.0" encoding="utf-8" ?>

    <hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
        <session-factory name="NHibernate.Test">
            <property name="connection.driver_class">NHibernate.Driver.SQLite20Driver</property>
            <property name="connection.connection_string">
                Data Source=nhibernate_test.db;Version=3
            </property>
            <property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
            <property name="query.substitutions">true=1;false=0</property>
            <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
        </session-factory>

</hibernate-configuration> 

Проблема в том, что я получаю сообщение об ошибке, из-за которого не удается найти System.Data.SQLite.Меня это не удивляет, поскольку, насколько я понимаю, в моно мы должны использовать Mono.Data.SQLite.

Проблема в том (если я правильно понимаю проблему), я не знаю, каксказать NHibernate использовать Mono.Data.SQLite вместо System.Data.SQLite.

Все это делается в Linux - если это что-то меняет.

Есть ли у кого-нибудь идеи, какпродолжить?

Ответы [ 2 ]

9 голосов
/ 01 июня 2011

Вам нужно, чтобы nHibernate знал о сборке Mono.Data.SQLite. Добавьте это в конфигурацию:

<add key="connection.driver_class" value="Name.Space.MonoSqliteDriver, AssemblyName" />

И вам также нужен простой MonoSQLiteDriver класс:

public class MonoSqliteDriver : NHibernate.Driver.ReflectionBasedDriver  
{  
    public MonoSqliteDriver() :   
        base("Mono.Data.Sqlite",  
        "Mono.Data.Sqlite.SqliteConnection",  
        "Mono.Data.Sqlite.SqliteCommand")  
    {  
    }  
    public override bool UseNamedPrefixInParameter {  
        get {  
            return true;  
        }  
    }  
    public override bool UseNamedPrefixInSql {  
        get {  
            return true;  
        }  
    }  
    public override string NamedPrefix {  
        get {  
            return "@";  
        }  
    }  
    public override bool SupportsMultipleOpenReaders {  
        get {  
            return false;  
        }  
    }  
}  

(код взят из http://intellect.dk/post/Why-I-love-frameworks-with-lots-of-extension-points.aspx)

0 голосов
/ 19 октября 2014

Обратите внимание, что вам может потребоваться использовать 4 параметра вместо 3 для вызова конструктора базового класса ReflectionBasedDriver, см. Использование NHibernate и Mono.Data.Sqlite

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