2011-10-02 24 views
4

我閱讀和實施Trying to using Nhibernate with Mono & SQLite - can't find System.Data.SQLite 然而,作爲最後的評論有規定,這似乎不是NHibernate的工作3.1使用NHibernate和Mono.Data.SQLite

的錯誤是

HibernateException的:的IDbCommand並在 IDbConnection實現組件Mono.Data.Sqlite無法找到。確保 組裝Mono.Data.Sqlite是[... ...可達]

我Mono.Data.Sqlite在GAC。
我已經試過指定「Mono.Data.Sqlite」以及typeof(Mono.Data.Sqlite.SqliteConnection).Assembly.FullName作爲程序集的名稱

有沒有人有任何想法如何讓這項工作?

回答

5

Trying to using Nhibernate with Mono & SQLite - can't find 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))); 
    } 
} 

我還沒有遇到什麼問題至今...