nHibernate: создание базы данных с использованием необработанного запроса - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь создать простое приложение, которое создаст базу данных на моем MS SQL Server с использованием необработанного SQL-запроса (я использую nHibernate 5.2.4). Обратите внимание, что я довольно плохо знаком с C #, поэтому приведенный ниже код предназначен только для целей обучения.

Я написал простой класс MsSqlSessionManager, который реализует методы для открытия / закрытия соединений.

public class MsSqlSessionManager : IDatabaseSessionManager
{
    private ISession _session;
    private readonly ISessionFactory _sessionFactory;

    public MsSqlSessionManager(Configuration configuration)
    {
        _sessionFactory = configuration.BuildSessionFactory();
    }

    public ISession Open()
    {
        var session = _sessionFactory.OpenSession();
        _session = session;
        return session;
    }

    public void Close(ISession session)
    {
        _session.Close();
    }
}

DatabaseManager использует MsSqlSessionManager для открытия сеанса и выполнения необработанных запросов. Первоначально этот класс будет отвечать за создание базы данных.

public class DatabaseManager : IDatabaseManager
{
    private readonly IDatabaseSessionManager _sessionManager;

    public DatabaseManager(IDatabaseSessionManager sessionManager)
    {
        _sessionManager = sessionManager;
    }

    public void Create()
    {
        using (var session = _sessionManager.Open())
        {
            session.CreateSQLQuery("create database test_db");
        }
    }

    public void TestQuery()
    {
        using (var session = _sessionManager.Open())
        {
            var result = session.CreateSQLQuery("select * from lorem.dbo.ipsum")
                .AddScalar("name", NHibernateUtil.String).List();
            foreach (var item in result)
            {
                Console.WriteLine(item);
            }
        }
    }
}

Теперь, если я вызову метод TestQuery (использует уже созданную базу данных), я получу правильные данные (поэтому configuration в порядке). Однако метод Create , похоже, не работает (и при этом не возвращает никакой ошибки). Я предполагаю, что запрос не выполняется, но я не могу найти способ сделать это.

Вопросы:

  1. Есть ли лучший способ создать базу данных программно ? Моя цель - использовать консольное приложение .net для его создания, и согласно этому посту нет встроенного способа сделать это.
  2. Как выполнить запрос в методе Create ?

Документация по nHibernate меня сильно подвела ...

1 Ответ

0 голосов
/ 12 марта 2019

Есть ли лучший способ создать базу данных программно?

Да.Используйте встроенный тип SchemaExport.Документация здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...