当前位置:  开发笔记 > 前端 > 正文

是否可以使用NHibernate创建数据库?

如何解决《是否可以使用NHibernate创建数据库?》经验,为你挑选了3个好方法。

我使用NHibernate和FluentNHibernate作为我的DAL.我也在使用SchemaExportSchemaUpdate创建和更新我的数据库模式.

我的问题是模式操作都需要数据库存在才能工作.我想以编程方式创建我的数据库并更新模式,因为可能有多个数据库,并且创建数据库不仅是一次性操作.

我知道我可以通过在与master数据库的连接上执行create database命令来手动执行此操作,但考虑到我否则使用NHibernate进行所有数据库交互,这感觉不对.顺便说一句,我使用SQLite内存数据库进行单元测试,因此我编写的任何sql都必须知道我正在使用哪个数据库.

有没有办法让NHibernate为我创建我的数据库?



1> Arnis Lapsa..:

我认为如果你开始用域模型开发应用程序,用NHibernate创建数据库是很好的.我的意思是 - 它可以让您深入了解数据库的外观.但一般来说 - 应该使用sql脚本.

我听说有些开发人员使用NHibernate数据库生成进行集成测试,他们在飞行中创建轻量级的sqlite数据库.

如何用NHibernate生成db?这就是我这样做的方式:

 public static void InitSessionFactory()
    {
        var connectionString =
            ConfigurationManager
                .ConnectionStrings["MyConnectionString"]
                .ConnectionString;

        var cfgFromXml = new Configuration();
        cfgFromXml.Configure();

        var cfg = Fluently.Configure(cfgFromXml)
            .Database(MsSqlConfiguration.MsSql2005
                          .ConnectionString(x => x.Is(connectionString))
                          .UseReflectionOptimizer())
            .Mappings(x => x.FluentMappings
                               .AddFromAssemblyOf())
            .ExposeConfiguration(BuildSchema);


        ObjectFactory.Inject(cfg.BuildSessionFactory());
    }

    private static void BuildSchema(Configuration config)
    {
        //Creates database structure
        //new SchemaExport(config)
        //   .Create(false, true);
    }



2> Stefan Stein..:

不,NHibernate不会为您创建数据库.创建数据库是您通常不希望在运行中完成的事情.它需要许多配置参数,这是特定于数据库的,甚至是特定于数据库版本的.

对于我们的产品,我写了一个设置数据库的类.它用于安装程序,集成测试和数据库维护工具.

NHibernate使用其配置创建连接.

我自己的实现创建了数据库.不同的方言有不同的实现方式.

NH创建表和其他数据库对象

安装程序类创建初始数据

还有一种特殊情况,即客户不希望授予创建数据库的权利.然后我们希望他这样做并跳过这一部分.


创建一个SqlCe数据库只需要一行代码:new SqlCeEngine(string.Format("Data Source ='{0}';",path)).CreateDatabase();
但据我所知,这不会创建数据库.它只是创建模式(表,索引等).

3> Matt Hinze..:

我们使用SchemaExport提供模式和Nant任务来删除和重新创建数据库.另一个Nant任务运行模式导出和数据加载代码,该代码以nunit任务运行的集成测试的形式存在.这里有一个样本.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有