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 にあります。これまでのところ、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 で動作させたいのですが、可能ですか?

4

1 に答える 1

3

OK、問題は SQL Server の互換性にあり、私がそれを理解したときの解決策はかなり明白です。

MsSqlConfiguration.MsSql2012

2008年に変更するだけで機能します。 これは、 2008年にはsys.seuencesビューがないため、2008年の2012年の構成で壊れる場所です

于 2013-06-20T10:31:54.110 に答える