1

マッピング

<class name="Project" optimistic-lock="version">
    <id name="Id" column="ProjectID" type="guid" unsaved-value="00000000-0000-0000-0000-000000000000">  
        <generator class="guid.comb" />
    </id>
    <version name="Version" generated="always" type="Int32" unsaved-value="0">
       <column name="Version" sql-type="int" not-null="true" />
    </version>
    <!-- properties -->
</class>

デバッグするとき、それを見るのは明白ですVersion equals 0

public class Project {
    public virtual Guid Id { get; protected set; }
    public virtual Int32 Version { get; set; }
}

しかし、保存例外が発生した場合:

値 NULL を列 'Version'、テーブル 'XXXX.dbo.Project' に挿入できません。列はヌルを許可しません。INSERT は失敗します。ステートメントは終了されました。

なんで?

ありがとう!

4

2 に答える 2

2

generated="always"NHibernate ではなく DB がこの値を生成し、NH が後でそれを取得することを意味します。

そうでない場合は、その属性を削除してください。name実際、デフォルト値に設定しているため、以外のすべての属性を削除できます。

于 2012-09-19T15:08:11.980 に答える
1

generated="always"type で使用していますInt32

generated (オプション - デフォルトは never): このバージョン プロパティ値が実際にデータベースによって生成されることを指定します。

詳細については、こちらこちらをご覧ください。

タイプを変更しTimestampたり、属性を削除したりできます。

Versionプロパティを次のように変更することをお勧めします。

public virtual int Version { get; private set; }
于 2012-09-19T15:11:25.330 に答える