1

この質問を投稿する前に、NH バージョニングに関する多くの例を見てきましたが、それらすべてが以下のコードを使用していることを示しています。MappingByCode を使用して、バージョン管理されたエンティティを作成できます。

Version(e => e.MyVersion, vm => {
     vm.Generated(VersionGeneration.Always);
     vm.UnsavedValue(0);
});

MyVersion の割り当ては SQL Server が行うべきだと思っていました。したがって、ISession.Save または ISession.SaveOrUpdate; を呼び出すと、NHProf は、生成された sql に Insert ステートメントに渡された MyVersion パラメータが含まれていないことを示していますが (予想どおり)、SQL Server がそれを生成しないため、クエリの実行は失敗します。結果はcannot insert null value into MyVersion column...エラーです。

VersionGeneration.Always についての私の期待は正しいですか? それで何が悪いの?

NHibernate 3.3 / SQL Server 2012 を使用しています

4

1 に答える 1

2

VersionGeneration.Always は、NHibernate がデータベース システムが INSERT と UPDATE の両方でバージョン番号を生成することを期待する必要があることを意味します。

ただし、数値を生成することになっていることをSQL Serverに伝える必要もあります...たとえば、http://msdn.microsoft.com/en-us/library/ms182776.aspxを参照してください。

于 2013-02-12T15:54:35.223 に答える