Действительно ли возможно создать базу данных с помощью NHibernate?

Вот функция псевдокода, которая интерполирует линейно между 2 цветами (staying in RGB space). Я использую класс Color для ясности здесь.

bAmount находится между 0 и 1 (для интерполяции)

Color interpolate(Color colorA, Color colorB, float bAmount) {
    Color colorOut;
    float aAmount = 1.0 - bAmount;
    colorOut.r =  colorA.r * aAmount + colorB.r * bAmount;
    colorOut.g =  colorA.g * aAmount + colorB.g * bAmount;
    colorOut.b =  colorA.b * aAmount + colorB.b * bAmount;
    return colorOut;
}
18
задан Jeroen 16 May 2015 в 12:13
поделиться

5 ответов

Взгляните на RhinoCommons . В Rhino.Commons.ForTesting, в UnitOfWorkTestContextDbStrategy.cs , Айенде выполнил там некоторую процедуру, которая создает базы данных.

1
ответ дан 30 November 2019 в 08:16
поделиться

Я думаю, что создание базы данных с NHibernate - это хорошо, если вы начнете разрабатывать приложение с моделью предметной области. Я имею в виду - это дает представление о том, как должна выглядеть ваша база данных. Но в целом - надо использовать sql скрипты.

Я слышал, что некоторые разработчики используют генерацию базы данных NHibernate для интеграционных тестов, они создают легкую базу данных sqlite на лету.

Как сгенерировать базу данных с помощью NHibernate? Вот как я это делаю:

 public static void InitSessionFactory()
    {
        var connectionString =
            ConfigurationManager
                .ConnectionStrings["MyConnectionString"]
                .ConnectionString;

        var cfgFromXml = new Configuration();
        cfgFromXml.Configure();

        var cfg = Fluently.Configure(cfgFromXml)
            .Database(MsSqlConfiguration.MsSql2005
                          .ConnectionString(x => x.Is(connectionString))
                          .UseReflectionOptimizer())
            .Mappings(x => x.FluentMappings
                               .AddFromAssemblyOf<NHibernateBootstrapper>())
            .ExposeConfiguration(BuildSchema);


        ObjectFactory.Inject(cfg.BuildSessionFactory());
    }

    private static void BuildSchema(Configuration config)
    {
        //Creates database structure
        //new SchemaExport(config)
        //   .Create(false, true);
    }
12
ответ дан 30 November 2019 в 08:16
поделиться

Мы используем SchemaExport для предоставления схемы и задачи Nant для удаления и воссоздания базы данных. Другая задача Nant выполняет экспорт схемы и код загрузки данных, который существует в форме интеграционного теста, запускаемого задачей nunit. Здесь есть образец .

5
ответ дан 30 November 2019 в 08:16
поделиться

Нет, NHibernate не будет создавать базу данных за вас. Создание баз данных - это то, что вы обычно не хотите делать на лету. Для этого требуется множество параметров конфигурации, и это очень зависит от базы данных, даже от версии базы данных.

Для нашего продукта я написал класс, который настраивает базу данных. Он используется для установщика, интеграционных тестов и инструмента обслуживания базы данных.

  • NHibernate создает соединение, используя свою конфигурацию.
  • моя собственная реализация создает базу данных. Существуют разные реализации для разных диалектов.
  • NH создает таблицы и другие объекты базы данных
  • Классы установщика создают исходные данные

Существует также особый случай, когда заказчик не хочет предоставлять право на создание базы данных. Затем мы ожидаем, что он это сделает, и пропустим эту часть.

9
ответ дан 30 November 2019 в 08:16
поделиться

Хм, вы действительно можете использовать SchemaExport, как вы упомянули, но я рассматриваю NHibernate в первую очередь как способ преодолеть разрыв между моделью предметной области и реляционным постоянным хранилищем. То есть для меня цель NHibernate - сохранять и извлекать объекты в моей модели домена.

Когда вы хотите обновлять схему, imho, вы не должны использовать NHibernate (если это вообще возможно), поскольку это не цель NHibernate. ; есть «предметно-ориентированный язык» под названием SQL :), который хорошо справляется с этими задачами.

Для создания моей базы данных и обновления схемы базы данных я использую Migrator.NET , который это фреймворк, который позволяет писать классы C #, в которых вы указываете, что нужно сделать (создать таблицу, добавить столбец и т. д.).
Преимущество этого состоит в том, что Migrator.NET также поддерживает несколько СУБД, поэтому вам не придется писать код SQL для конкретной базы данных.

1
ответ дан 30 November 2019 в 08:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: