2013-10-10 63 views
1

林具有建立一個SQLite內存數據庫的問題,我已經安裝的SQLite從這裏http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wikiNhibernation內存數據庫安裝錯誤

我收到此NHibernate的例外

SQL邏輯錯誤或丟失的數據庫,未知數據庫核心

試圖運行一個單元測試時

,該異常在BuildSchema方法提出

這裏是我廠的代碼

Imports NHibernate.Tool.hbm2ddl 

Namespace SessionManager 
    Public Class Factory 
     Private Sub New() 
     End Sub 

    Private Shared _configuration As NHibernate.Cfg.Configuration 
    Private Shared _sessionFactory As NHibernate.ISessionFactory 

    Public Shared Function OpenTestSession() As NHibernate.ISession 
     If SessionFactory Is Nothing Then 
      SessionFactory = CreateSessionFactory() 
      Dim sx = SessionFactory.OpenSession() 
      'BuildSchema2(sx) 
      Return sx 
     End If 
    End Function 

    Private Shared Function CreateSessionFactory() As NHibernate.ISessionFactory 
     Return FluentNHibernate.Cfg.Fluently.Configure().Database(GetInMemoryDataBaseConfiguration()).Mappings(Sub(m) m.FluentMappings.AddFromAssemblyOf(Of ModelEntity)()).ExposeConfiguration(Sub(Cfg) BuildSchema3(Cfg)).BuildSessionFactory() 
    End Function 

    Private Shared Function CreateSessionFactory2() As NHibernate.ISessionFactory 
     Return FluentNHibernate.Cfg.Fluently.Configure().Database(GetInMemoryDataBaseConfiguration()).Mappings(Sub(m) m.FluentMappings.AddFromAssemblyOf(Of ModelEntity)()).ExposeConfiguration(Function(Cfg) InlineAssignHelper(_configuration, Cfg)).BuildSessionFactory() 
    End Function 

    Private Shared Sub BuildSchema(config As NHibernate.Cfg.Configuration) 
     Dim se = New SchemaExport(config) 
     se.Create(False, True) 
    End Sub 

    Private Shared Sub BuildSchema2(sx As NHibernate.ISession) 
     Dim se = New SchemaExport(_configuration) 
     se.Execute(True, True, False, sx.Connection, Nothing) 
    End Sub 

    Private Shared Sub BuildSchema3(config As NHibernate.Cfg.Configuration) 
     Dim se = New SchemaExport(config) 
     se.Create(True, True) 
    End Sub 

    Private Shared Function GetInMemoryDataBaseConfiguration() As FluentNHibernate.Cfg.Db.SQLiteConfiguration 
     Return FluentNHibernate.Cfg.Db.SQLiteConfiguration.Standard.InMemory() 
    End Function 

    Private Shared Function InlineAssignHelper(Of T)(target As T, value As T) As T 
     target = value 
     Return value 
    End Function 

End Class 

末命名空間

如果有人知道的解決方案或指向我往一個解決方案,我都會贈點:)

編輯

SQLite似乎與我們的SQL Server模式有關,當我映射一個標籤沒有一個綱要它的作品....任何想法如何讓映射忽略表映射的架構:)。

進一步就此我發現鏈接的問題這個...... Fluent NHibernate - Remove Schema from Mappings for Testing With SQLite

回答

0

你似乎是在正確的軌道上 - 儘管我不認爲你能得到它忽略模式在映射中,缺少實現自己的方言或類似的東西。相反,因爲你使用Fluent NHibernate來生成映射,所以要求它在沒有模式的情況下生成映射。畢竟,你的ClassMaps,AutoMappingOverrides和Conventions都只是代碼。這樣做的一個辦法是,像這樣:

創建存儲可以在運行時更改設置的地方:

public static class MappingOptions 
{ 
    public static readonly ThreadLocal<bool> ForSQLite = new ThreadLocal<bool>(); 
} 

將其設置要求FluentNHibernate生成映射之前,再檢查一下哪裏需要:

public class EmployeeMap : ClassMap<Employee> 
{ 
    public EmployeeMap() 
    { 
     if (!MappingOptions.ForSQLite.Value) 
      Schema("core"); 
     Table("Employee"); 
     // ... other stuff ... 
    } 
}