内存中的SQLite和NHibernate

时间:2011-12-23 14:08:46

标签: nhibernate sqlite in-memory-database

我有点迷失在这里。

我搜索了一些信息,显然有几个SQLite GUI工具来创建SQLite DB文件。同时我也注意到NHibernate带有SQLite的内存配置

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

使用这样的设置,没有使用DB文件的选项。那么在我使用NHibernate执行所有CRUD操作之前,如何创建所有表结构并将记录插入内存数据库呢?

由于

编辑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()

2 个答案:

答案 0 :(得分:3)

如果您正在使用InMemoryDB,则不会创建任何phsyical文件,并且当处理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);
               });

答案 1 :(得分:1)

我猜你真的想要一个内存数据库专门用于测试pourpose。如果是这样,您可以在测试初始化​​中使用NHibernate为您创建架构:

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

然后你可以开始添加和玩实体。