我在开发期间使用SQLite作为我的数据库,我想推迟实际创建最终数据库,直到我的域完全映射。所以我在Global.asax.cs文件中有这个:
private void InitializeNHibernateSession() { Configuration cfg = NHibernateSession.Init( webSessionStorage, new [] { Server.MapPath("~/bin/MyNamespace.Data.dll") }, new AutoPersistenceModelGenerator().Generate(), Server.MapPath("~/NHibernate.config")); if (ConfigurationManager.AppSettings["DbGen"] == "true") { var export = new SchemaExport(cfg); export.Execute(true, true, false, NHibernateSession.Current.Connection, File.CreateText(@"DDL.sql")); } }
AutoPersistenceModelGenerator挂钩了各种约定,包括像这样的TableNameConvention:
public void Apply(FluentNHibernate.Conventions.Instances.IClassInstance instance) { instance.Table(Inflector.Net.Inflector.Pluralize(instance.EntityType.Name)); }
这很好用于生成的sqlite db没有多元化的表名。
知道我缺少什么吗?
感谢。
答案 0 :(得分:0)
好吧,我不确定为什么会有所不同,但在调试过程中,我做了这个,现在它可以工作了:
public void Apply(FluentNHibernate.Conventions.Instances.IClassInstance instance) { string tablename = Inflector.Net.Inflector.Pluralize(instance.EntityType.Name); instance.Table(tablename); System.Diagnostics.Debug.WriteLine(string.Format("Table = {0}", instance.TableName)); }