And*_*rew 18 database nhibernate fluent-nhibernate
我使用NHibernate和FluentNHibernate作为我的DAL.我也在使用SchemaExport
和SchemaUpdate
创建和更新我的数据库模式.
我的问题是模式操作都需要数据库存在才能工作.我想以编程方式创建我的数据库并更新模式,因为可能有多个数据库,并且创建数据库不仅是一次性操作.
我知道我可以通过在与master数据库的连接上执行create database命令来手动执行此操作,但考虑到我否则使用NHibernate进行所有数据库交互,这感觉不对.顺便说一句,我使用SQLite内存数据库进行单元测试,因此我编写的任何sql都必须知道我正在使用哪个数据库.
有没有办法让NHibernate为我创建我的数据库?
Arn*_*psa 12
我认为如果你开始用域模型开发应用程序,用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<NHibernateBootstrapper>())
.ExposeConfiguration(BuildSchema);
ObjectFactory.Inject(cfg.BuildSessionFactory());
}
private static void BuildSchema(Configuration config)
{
//Creates database structure
//new SchemaExport(config)
// .Create(false, true);
}
Run Code Online (Sandbox Code Playgroud)
不,NHibernate不会为您创建数据库.创建数据库是您通常不希望在运行中完成的事情.它需要许多配置参数,这是特定于数据库的,甚至是特定于数据库版本的.
对于我们的产品,我写了一个设置数据库的类.它用于安装程序,集成测试和数据库维护工具.
还有一种特殊情况,即客户不希望授予创建数据库的权利.然后我们希望他这样做并跳过这一部分.
小智 1
看看RhinoCommons。在 Rhino.Commons.ForTesting 下的UnitOfWorkTestContextDbStrategy.cs中,Ayende在那里完成了一些创建数据库的例程。