【发布时间】: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 方法似乎不起作用(也不返回任何错误)。我假设查询没有执行,但我找不到任何方法。
问题是:
- 有没有更好的方法来以编程方式创建数据库?我的目标是使用 .net 控制台应用程序来创建它,根据this post,没有内置的方法可以做到这一点。
- 如何在Create方法中执行查询?
nHibernate 的文档让我很失望......
【问题讨论】:
-
您如何确认查询无效?如果你打开你的 MS SQL Server 并刷新你的数据库,它不会出现吗?
-
@Symon 是的,我已经尝试刷新数据库并且数据库没有出现。
-
@DavidOsborne 谢谢,这就是我要找的。span>
标签: c# .net sql-server nhibernate