1

SQLite inMemory データベースのセットアップに問題があります。ここから sqlite をインストールしましたhttp://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

この 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 - SQLite でテストするためにマッピングからスキーマを削除する

4

1 に答える 1

0

あなたは正しい方向に進んでいるように見えますが、独自の方言などを実装しない限り、マッピングでスキーマを無視することはできないと思います。代わりに、Fluent NHibernate を使用してマッピングを生成しているので、スキーマなしでマッピングを生成するように依頼してください。結局のところ、ClassMap、AutoMappingOverride、および規約はすべて単なるコードです。これを行う 1 つの方法は次のようになります。

実行時に変更できる設定を保存する場所を作成します。

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 ...
    }
}
于 2013-10-10T16:00:33.320 に答える