使用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上运行,是否可能?
答案 0 :(得分:3)
好的,问题在于SQL Server的兼容性,当我弄清楚时,解决方案是相当明显的:
MsSqlConfiguration.MsSql2012
它只需要改为2008,它就可以了。 自2008年以来This is where it breaks with 2012 configuration on 2008没有sys.seuences视图