nHibernate:使用原始查询创建数据库

时间:2019-03-11 21:41:11

标签: c# .net sql-server nhibernate

我正在尝试构建一个简单的应用程序,它将使用原始sql查询在MS SQL Server中创建一个数据库(我正在使用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 可以)。但是,创建方法似乎无效(也不返回任何错误)。我假设该查询未执行,但找不到任何方法。

问题是:

  1. 是否有更好的方法以编程方式创建数据库?我的目标是使用.net控制台应用程序来创建它,并且根据this post,没有内置的方法可以做到这一点。
  2. 如何使用 Create 方法执行查询?

nHibernate的文档让我很难过...

1 个答案:

答案 0 :(得分:0)

  

是否有更好的方法以编程方式创建数据库?

是的。使用内置的SchemaExport类型。文档here