2010-07-23 88 views
0

我剛開始使用NHibernate。直到現在發現它還不錯,但遇到了一個我無法解決的問題。任何幫助將不勝感激。Nhibernate <version>功能不起作用

我正在嘗試使用「版本」功能來幫助實現優化鎖定。以下是我的映射文件和相關類的一部分代碼。我的問題是,無論我修改任何字段多少次,數據庫上的「版本」列都不會更新。

我的映射文件:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        namespace="MyTest" 
        assembly ="MyTest"> 
    <class name="Project" table="dbo.M_Project"> 
    <id name="ProjectId" type="Int32" unsaved-value="null"> 
     <column name="ProjectId" sql-type="int" not-null="true" unique="true" /> 
     <generator class="native" /> 
    </id> 
    <version name="Version" column="Version"/> 
    <property name="ProjectName" type="String"> 
     <column name="ProjectName" length="100" sql-type="nvarchar" not-null="true"/> 
    </property> 
    <property name="Updated" type="bool"> 
     <column name="Updated" sql-type="bit" not-null="true"/> 
    </property> 
    <property name="NoOfItemsWithExceptions" type="int"> 
     <column name="NoOfItemsWithExc" sql-type="int" not-null="true"/> 
    </property> 
    <property name="MenuState" type="int"> 
     <column name="MenuState" sql-type="int" not-null="true"/> 
    </property> 
    <property name="Initialized" type="bool"> 
     <column name="Initialized" sql-type="bit" not-null="true"/> 
    </property> 
    <property name="InventoryRun" type="bool"> 
     <column name="InventoryRun" sql-type="bit" not-null="true"/> 
    </property> 
    <property name="ProductionForecastRun" type="bool"> 
     <column name="ProductionForecastRun" sql-type="bit" not-null="true"/> 
    </property> 
    <property name="MonthlyUpdate" type="bool"> 
     <column name="MonthlyUpdate" sql-type="bit" not-null="true"/> 
    </property> 
    <bag name="SKUList" table="dbo.P_SKU" inverse="true" lazy="true" cascade="save-update"> 
     <key column="ProjectId" /> 
     <one-to-many 
     class="SKU"/> 
    </bag> 
    </class> 
</hibernate-mapping> 

關聯的版本屬性:

private int _version; 
    public virtual int Version 
    { 
     get { return _version; } 
     set { _version = value; } 
    } 

謝謝!

回答

0

可能有必要明確設置optimistic-lock屬性(理論上它不是)。例如

<class name="Project" table="dbo.M_Project" optimistic-lock="dirty"> 

Here你有更多關於它

+0

我的理解是,樂觀鎖屬性應該是「版」(默認值),如果意圖是有樂觀鎖在所有的領域。不過,我確實嘗試了「髒」,但沒有奏效。 – RHK 2010-07-23 21:32:25