【问题标题】:nHibernate: Create database using raw querynHibernate:使用原始查询创建数据库
【发布时间】:2019-03-12 17:17:19
【问题描述】:

我正在尝试构建一个简单的应用程序,它将使用原始 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 没问题)。但是,Create 方法似乎不起作用(也不返回任何错误)。我假设查询没有执行,但我找不到任何方法。

问题是:

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

nHibernate 的文档让我很失望......

【问题讨论】:

  • 您如何确认查询无效?如果你打开你的 MS SQL Server 并刷新你的数据库,它不会出现吗?
  • @Symon 是的,我已经尝试刷新数据库并且数据库没有出现。
  • @DavidOsborne 谢谢,这就是我要找的。​​span>

标签: c# .net sql-server nhibernate


【解决方案1】:

有没有更好的方式以编程方式创建数据库?

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

【讨论】:

  • 如果我理解正确,SchemaExport 用于在现有数据库上创建数据库模式。我想要实现的是在它不存在时创建一个数据库,然后将架构导出到它。
猜你喜欢
  • 2015-07-01
  • 2020-07-02
  • 2018-11-04
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多