代码之家  ›  专栏  ›  技术社区  ›  rufus1530

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

  •  0
  • rufus1530  · 技术社区  · 7 年前

    我正在尝试构建一个简单的应用程序,它将使用原始sql查询(我使用的是nhibernate 5.2.4)在ms sql server中创建一个数据库。请注意,我对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();
        }
    }
    

    这个 数据库管理器 使用 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);
                }
            }
        }
    }
    

    现在如果我打电话 测试查询 方法(使用已经创建的数据库),我实际上得到了正确的数据(所以 配置 没关系。然而, 创造 方法似乎不起作用(也不返回任何错误)。我假设查询没有执行,但我找不到任何方法来执行。

    问题是:

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

    尼伯纳的文件让我很失望…

    0 回复  |  直到 7 年前
        1
  •  0
  •   David Osborne    7 年前

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

    对。使用内置 SchemaExport 类型。文档 here .

    推荐文章