FluentNHibernate SchemaUpdate不起作用

时间:2013-06-20 07:56:41

标签: asp.net-mvc nhibernate fluent-nhibernate sql-server-2012 .net-4.5

使用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上,但无效。到目前为止,我能够通过检查schemaUpdate.Exceptions来诊断出错是什么,它包含2个条目,两者都有相同的例外:

[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上运行,是否可能?

1 个答案:

答案 0 :(得分:3)

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

MsSqlConfiguration.MsSql2012

它只需要改为2008,它就可以了。 自2008年以来This is where it breaks with 2012 configuration on 2008没有sys.seuences视图