簡體   English   中英

NHibernate和整數列作為版本

[英]NHibernate and Integer Columns as Version

我正在嘗試使用NHibernate * hbm.xml映射文件創建一個DB表,它將具有用於並發檢查的版本控制列。 版本控制列應該是可以為空的整數。

雖然數據庫創建得很好,但使用映射文件作為參考,會發生以下情況:*第一個記錄插入時帶有NULL值作為版本*先前插入的記錄的更新失敗,並顯示“過時數據”異常

換句話說,無論我做什么,Version列始終為NULL。 我對使用NHibernate的並發控制有點新,所以我不太明白我做錯了什么..

如果我使用Timestamp作為版本,一切正常。 但是,我的要求是使用整數..因此我的問題。

這是我的映射文件:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="true" auto-import="false" assembly="New1.Backend" namespace="New1.BO">
    <class name="Natrio" table="`Natrios`" schema="`dbo`">
        <cache usage="read-write" />
        <id name="Id" column="`Id`" type="System.Int32">
            <generator class="NHibernate.Id.Enhanced.TableGenerator">
                <param name="increment_size">200</param>
                <param name="segment_value">Natrios</param>
                <param name="optimizer">pooled-lo</param>
            </generator>
        </id>
        <version name="Version" column="`Version`" type="System.Nullable`1[[System.Int32, mscorlib]], mscorlib" generated="always" unsaved-value="0">
            <column name="`Version`" not-null="false" sql-type="int" />
        </version>
        <property name="Attribute" column="`Attribute`" type="String" not-null="false" length="100" />
    </class>
</hibernate-mapping>

任何想法和/或建議將不勝感激!

為什么需要可空版本列? 在任何情況下,我認為問題是由映射中的unsaved-value="0"引起的。 由於可空列的默認值為null - NHibernate認為該值已經生成,因此從未分配。 您需要將其設置為null - unsaved-value="null ”以使其與可空列一起使用。 unsaved-value="0"對於不可空類型是有意義的。 但最好完全省略這個屬性,讓NHibernate使用

generated屬性的另一個問題。 它是關於數據庫生成的 - 所以always意味着這個值是由DB自動生成的。 您應該刪除它或將其指定為generated="never"

我相信以下映射應該適合您:

<version name="Version">
    <column name="`Version`" not-null="false" sql-type="int" />
</version>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM