3

我在使用 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 年工作,这可能吗?

4

1 回答 1

3

好的,所以问题在于SQL Server的兼容性,当我弄清楚时,解决方案是相当明显的:

MsSqlConfiguration.MsSql2012

只需将其更改为 2008 即可。 这是它在 2008 年与 2012 年配置中断的地方,因为 2008 年没有 sys.seuences 视图

于 2013-06-20T10:31:54.110 回答