我在使用 FluentNHibernate 的 SchemaUpdate 方法更新数据库架构时遇到问题。这是我的代码:
Fluently.Configure()
.Database(MsSqlConfiguration
.MsSql2012.ShowSql()
.ConnectionString(System.Configuration.ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString))
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf<LanguageMap>()
.AddFromAssemblyOf<RoleMap>()
//(...)
)
//.ExposeConfiguration(CreateSchema)
.ExposeConfiguration(UpdateSchema)
.BuildConfiguration();
CreateSchema 方法如下所示:
private static void CreateSchema(Configuration cfg)
{
var schemaExport = new SchemaExport(cfg);
schemaExport.Execute(false, true, true);
schemaExport.Drop(false, true);
schemaExport.Create(false, true);
}
像这样的 UpdateSchema:
private static void UpdateSchema(Configuration cfg)
{
var schemaUpdate = new SchemaUpdate(cfg);
schemaUpdate.Execute(false, true);
var ex = schemaUpdate.Exceptions;
}
现在 CreateSchema 工作正常 - 正在正确创建表。问题在于 UpdateSchema,它不起作用。到目前为止,我能够通过检查包含 2 个条目的 schemaUpdate.Exceptions 来诊断问题所在,两者都有相同的异常:
[System.Data.SqlClient.SqlException] = {"Invalid object name 'sys.sequences'."}
根据我的阅读,sys.sequences 是 SQL Server 2012 中的一个新功能,但是我不知道这个表(这是系统表吗?)应该如何创建(不应该在创建数据库时创建) ?)。这可能是某个东西的版本冲突问题吗?我正在使用 SQL Server 2012 Express、.NET Framework 4.5、NHibernate 3.3.1.4 和 FluentNHibernate 1.3
----------------------编辑--------------
好的,我的错误,我实际上是连接到 2008 版本的 os SQL Server,这就是为什么 sys.sequences (现在我也知道它是一个系统视图)不可用的原因。不过,我希望 SchemaUpdate 在 2008 年工作,这可能吗?