Использование NHibernate и Mono.Data.SQLite - PullRequest
5 голосов
/ 02 октября 2011

Я прочитал и реализовал Пытался использовать Nhibernate с Mono & SQLite - не могу найти System.Data.SQLite Однако, как говорится в последнем комментарии, похоже, что он не работает с NHibernate 3.1

Ошибка:

HibernateException: не удалось найти реализацию IDbCommand и IDbConnection в сборке Mono.Data.Sqlite.Убедитесь, что сборка Mono.Data.Sqlite является [... достижимой ...]

У меня есть Mono.Data.Sqlite в GAC.
Я пробовал оба указывать "Mono.Data.Sqlite ", а также typeof(Mono.Data.Sqlite.SqliteConnection).Assembly.FullName как название сборки

У кого-нибудь есть идеи, как заставить это работать?

1 Ответ

7 голосов
/ 04 октября 2011

Существует проблема в ответе Попытка использования Nhibernate с Mono & SQLite - не удается найти System.Data.SQLite .Чтобы данный конструктор (3 параметра) работал, необходимо сначала загрузить соответствующую сборку (Mono.Data.Sqlite).

Это работает, если базовый конструктор с 4 параметрами используется следующим образом:

public class MonoSQLiteDriver : NHibernate.Driver.ReflectionBasedDriver  
{  
        public MonoSQLiteDriver() 
            : base(
            "Mono.Data.Sqlite",
            "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 - спасибо.)

А если вы используете FluentNHibernate, то вам также потребуется:

public class MonoSQLiteConfiguration : PersistenceConfiguration<MonoSQLiteConfiguration>
{
    public static MonoSQLiteConfiguration Standard
    {
        get { return new MonoSQLiteConfiguration(); }
    }

    public MonoSQLiteConfiguration()
    {
        Driver<MonoSQLiteDriver>();
        Dialect<SQLiteDialect>();
        Raw("query.substitutions", "true=1;false=0");
    }

    public MonoSQLiteConfiguration InMemory()
    {
        Raw("connection.release_mode", "on_close");
        return ConnectionString(c => c
            .Is("Data Source=:memory:;Version=3;New=True;"));

    }

    public MonoSQLiteConfiguration UsingFile(string fileName)
    {
        return ConnectionString(c => c
            .Is(string.Format("Data Source={0};Version=3;New=True;", fileName)));
    }

    public MonoSQLiteConfiguration UsingFileWithPassword(string fileName, string password)
    {
        return ConnectionString(c => c
            .Is(string.Format("Data Source={0};Version=3;New=True;Password={1};", fileName, password)));
    }
}

Пока проблем не возникало ...

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