2012-02-17 4 views
0

シャープアーキテクチャ/流暢NHibernateを使用して、私のクラスにVersionプロパティ(int)を設定しましたが、そのオブジェクトを更新するとバージョン番号が正しく更新されてもエラーはスローされません。例外をスローするのではなく、基本的にバージョンがマージされます。NHibernateのバージョンプロパティが動作していません

public class MyClassMap : IAutoMappingOverride<MyClass> 
{ 
    public void Override(AutoMapping<MyClass> mapping) 
    { 
     mapping.Version(x => x.Version); 
     mapping.OptimisticLock.Version(); 
    } 
} 

2つの同時コミットのバージョンが異なることに注意してください。ただし、何も起こりません。

何がありますか?

編集:はここでは、コードです:

public ActionConfirmation SaveOrUpdate(IncidenciaDetalleModel model) 
    { 
     Incidencia incidencia = model.Codigo == null 
            ? new Incidencia(Convert.ToInt32(model.Solicitante.Id)) 
            : Load(model.Guid); 

     TransferFormValuesTo(incidencia, model); 

     // Invoke Sharp NHibernate's SaveOrUpdate() 
     Incidencia saved = base.SaveOrUpdate(incidencia); 

     return ActionConfirmation.CreateSuccessConfirmation(saved); 
    } 



    private void TransferFormValuesTo(Incidencia incidencia, IncidenciaDetalleModel model) 
    { 
     incidencia.Resumen = model.Resumen.Trim(); 
     incidencia.Descripcion = model.Descripcion.Trim(); 
     incidencia.Solicitante = model.Solicitante.Id.ToString(CultureInfo.InvariantCulture); 
     incidencia.Regional = regionalTask.Load(model.Regional.GetRegionalId()); 
    } 
+1

のSELECTの後にあるかどうかを確認するために、「NHibernate.SQL」のログを有効にすることができ更新するコードを示しています。あなたは 'session.Merge()'を使いますか? – Firo

+0

いいえ、私は通常のsession.SaveOrUpdate()を使用します。私は仕事に就くと約1時間でコードを表示します。ありがとう。 – rebelliard

+0

はい、変更をデータベースに保存するコードを表示してください。 –

答えて

2

あなたはバージョンがそう表記が出て落ちかけていない細かい更新しました。

実際の同時更新はありません。 Load(model.Guid)を使用してデータベースからオブジェクトをロードしませんが、プロキシを作成します。 TransferFormValuesToに更新されてすぐに保存されます。 TransferFormValuesToSaveOrUpdate()の間でのみ、競合状態が発生して失効したオブジェクトになる可能性があります。

あなたは、クライアント1の更新が実際にクライアント2

関連する問題