2010-07-23 7 views
0

Je viens de commencer à travailler avec NHibernate. Je l'ai trouvé assez bien jusqu'à maintenant mais j'ai rencontré un problème que je suis incapable de résoudre. Toute aide est la bienvenue. J'essaie d'utiliser la fonctionnalité "version" pour aider à mettre en œuvre le verrouillage optmiste. Ci-dessous, mon fichier de mappage et une partie du code de la classe associée. Mon problème est que, peu importe le nombre de fois que je modifie un champ, la colonne "Version" de la base de données n'est pas mise à jour.Nhibernate <version> fonctionnalité ne fonctionne pas

Mon fichier de mapping:

<?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> 

La propriété version associée:

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

Merci!

Répondre

0

Il peut être nécessaire de définir explicitement l'attribut optimistic-lock (en théorie ce n'est pas le cas). Par exemple

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

Here vous avez plus d'informations à ce sujet

+0

Ma compréhension est que la propriété optimistic-lock doit être « version » (par défaut) si l'intention est d'avoir le verrouillage optimiste sur tous les champs. Cependant j'ai essayé "sale" mais cela n'a pas fonctionné. – RHK

Questions connexes