In-Memory SQLite и NHibernate - PullRequest
       15

In-Memory SQLite и NHibernate

1 голос
/ 23 декабря 2011

Я как бы потерялся здесь.

Я искал некоторую информацию, по-видимому, есть несколько инструментов SQLite GUI для создания файла БД SQLite. Между тем я также заметил, что NHibernate поставляется с конфигурацией SQLite в памяти

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

При такой настройке нет возможности использовать файл БД. Итак, как я могу создать всю структуру таблицы и вставить записи в базу данных в памяти, прежде чем использовать 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 ]

3 голосов
/ 23 декабря 2011

Если вы используете InMemoryDB, физический файл не создается, а когда 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 голос
/ 23 декабря 2011

Полагаю, вам действительно нужна база данных в памяти, предназначенная исключительно для тестовой заливки. Если это так, вы можете использовать в своей инициализации теста NHibernate для создания схемы:

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

тогда вы можете начать добавлять и играть с сущностями.

...