使用NHibernate完成我的第一步,我正在尝试从hbm文件自动创建表。数据库后端是SQL Server 2008 Developer Edition。
这是我在NHibernate教程中看到的常用示例代码:
var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly(typeof(Posting).Assembly);
new SchemaExport(cfg).Execute(false,true,false,false);
可悲的是,这不起作用。我已将show_sql设置为true,并且它不会打印出任何语句。查看SQL事件探查器,我看到我的应用程序连接到数据库,但后来什么也没做。
我可以通过将第一个参数(“script”)更改为true来解决这个问题:
new SchemaExport(cfg).Execute(true,true,false,true);
我不明白为什么。遗憾的是没有真正解释SchemaExport的参数(也没有解释.Create和.Execute之间的区别),我想知道这个参数的作用,以及为什么不需要它,即使用SQL Compact Edition时(也适用于脚本是假的)
答案 0 :(得分:28)
SchemaExport是Hbm2Ddl实用程序的一部分,它实际上与NHibernate功能分开。它不使用在NHibernate仅运行时使用的“show_sql”。
要获取您创建的架构的副本,请使用.SetOutputFile(filename)
这是我希望创建新数据库时使用的方法。 我在MyDDL.sql文件中获得格式化的模式,数据库是从模式构建的:
private void BuildSchema(Configuration config)
{
new SchemaExport(config)
.SetOutputFile(_fileName + "MyDDL.sql")
.Execute(true /*script*/, true /*export to db*/,
false /*just drop*/, true /*format schema*/);
}
SchemaExport.Create只是Schema.Execute的快捷方式,只需删除false,格式为true。
public void Create(bool script, bool export)
{
Execute(script, export, false, true);
}