2011-12-23 12 views
1

ここでは紛失しています。メモリ内SQLiteとNHibernate

私はいくつかの情報を検索しましたが、確かにSQLite DBファイルを作成するいくつかのSQLite GUIツールがあります。一方、私はまた、NHibernateは気づいたDBファイルを使用するオプションはありません、このような設定でSQLiteの

return Fluently.Configure().Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyEntityMap>()).Database(SQLiteConfiguration.Standard.InMemory().ShowSql()).BuildSessionFactory(); 

のメモリ内のコンフィギュレーションが付属しています。だから、すべてのCRUD操作を実行するためにNHibernateを使用する前に、どのようにすべてのテーブル構造を作成し、レコードをメモリ内のデータベースに挿入するのですか?

編集1

おかげ - マッピングクラスとセッションクラス マイエンティティの基本クラスを含め

Public MustInherit Class SingleKeyEntity(Of TId) 
    Public Overridable Property Id() As TId 
     Get 
      Return m_Id 
     End Get 
     Set(value As TId) 
      m_Id = value 
     End Set 
    End Property 
End Class 

私のエンティティクラス

Public Class Subscription 
    Inherits SingleKeyEntity(Of System.Nullable(Of Integer)) 

    Private m_Subscriber As String 
    Public Overridable Property Subscriber() As String 
     Get 
      Return m_Subscriber 
     End Get 
     Set(value As String) 
      m_Subscriber = value 
     End Set 
    End Property 

    Private m_Format As String 
    Public Overridable Property Format() As String 
     Get 
      Return m_Format 
     End Get 
     Set(value As String) 
      m_Format = value 
     End Set 
    End Property 

エンドクラス

マイマッピングクラス

Public Class SubscriptionMap 
    Inherits ClassMap(Of Subscription) 
    Public Sub New() 
     Table("SUBSCRIPTIONS") 

     Id(Function(x) x.Id, "ID").GeneratedBy.Identity() 
     Map(Function(x) x.Subscriber, "SUBSCRIBER").[Not].Nullable() 
     Map(Function(x) x.Format, "DISTRIBUTION_FORMAT").[Not].Nullable() 
     ' more properties omitted 
    End Sub 
End Class 

そして、私のセッション構成

Return Fluently.Configure() _ 
     .Mappings(Function(m) m.FluentMappings.AddFromAssemblyOf(Of SubscriptionMap)()) _ 
     .Database(SQLiteConfiguration.Standard.InMemory().ShowSql()) _ 
     .ExposeConfiguration(Sub(x As NHibernate.Cfg.Configuration) 
           Dim export As SchemaExport = New SchemaExport(x) 
           'export.Execute(False, True, False) 
           export.Create(False, True) 
          End Sub) _ 
     .BuildSessionFactory() 

答えて

3

InMemoryDBを使用している場合は、作成されたphyicalファイルはありません。また、SessionFactoryが破棄されると、InMemoryDBは失われます。

これは、InMemoryDBがユニットテスティングのために絶好の機会となり、常にセットアップ/ティアダウンの必要性を取り除くためです。

私がテストしていない実際のアプリケーションのためならば、あなたの目的を願っています:)

すべてのテーブルを作成するには、あなたがそうのように設定をエクスポートする必要があります。

return Fluently.Configure() 
       .Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyEntityMap>()) 
       .Database(SQLiteConfiguration.Standard.InMemory().ShowSql()).BuildSessionFactory() 
       .ExposeConfiguration(x => 
       { 
        new SchemaExport(x).Execute(false, true); 
       }); 
+0

私はメモリDbにいくつかのデータを設定する必要があるので、私は、挿入するためにNHを使用する必要がありますか? – hardywang

+0

@hardywang - そうです。しかし、上記のことは、少なくともあなたのマッピングに基づいてすべてのテーブルを作成します。 – Phill

1

私はあなたが本当に排他的にテストpourposeのためのインメモリデータベースたい推測しています。そうなら、テスト初期化でNHibernateがスキーマを作成することができます:

SchemaExport se = new SchemaExport(cfg); 
      se.Create(true, true); 

エンティティを追加して再生することができます。

+1

私はどちらか 'SchemaExportの試してみました。 Execute'または 'SchemaExport.Create'を使用していますが、メモリ内テーブルにスキーマを作成していないようです。私は読んだり、テーブルに挿入しようとすると、 "SQLiteのエラーはありませんそのようなテーブル:私のテーブル名"エラー。私はちょうどそこに私はメモリ内のテーブルの状態を確認することは簡単だと思いますか? – hardywang

+0

それは動作するはずです。どのようにマッピングを作成しましたか? cfgをどのように作成しますか?あなたの質問にそれを加えてください。 –

+0

上記の私の質問を参照してください、私はエンティティクラス、流暢なnhibernateマッピングクラスと設定を含む – hardywang

関連する問題