2009-07-16 9 views
1

ここに私がやっていることはありますが、私のために働いていません。N SubSonic 3、Dirty Columnsコレクションのティアはアップデート時に空白です

私はSubSonic 3 ActiveRecordテンプレートで生成されたDALを持っています。ファサードといくつかのバリデーションが混在しているサービスレイヤー(ビジネスレイヤーもあります)があります。

私は、public void UpdateClient(クライアントクライアント)のようなサービスレイヤでメソッドを持っていると言います。 私のGUIで私はIDを持ついくつかのデータでそれを埋めるクライアントオブジェクトを作成し、これは決して働いて、ダーティな列のコレクション(その列は、より効率的な更新statmentを使用するために変更されたトラック)はalwayes空の。

私はGUIの中のデータベースからオブジェクトを取得しようとしたが、サービスメソッドに渡しても動作していない場合

私はデータベースからオブジェクトをクエリし、同じコンテキストのすべてのGUI上でUpdate()を呼び出すと、これが私が作成したサービスレイヤ全体を破棄する唯一のシナリオです。

しかし、これはオブジェクトのトラッキングで何かをしなければならないが、私が知っていることは、SubSonicはそれをしないでください。

お願いします。ありがとう。 Adel。

+0

あなたはGUI層(リサイズ/ XAML/Webフォーム/ MVC)とは何ですか? –

答えて

2

これは機能でありバグではないようです。サブソニックは、オブジェクトがDBからロードされている場合にのみ列をダーティとマークします。したがって、実際にはオブジェクトを保存したりオブジェクト化したり、プロパティに変更を加えたり、再度保存することはできません。 Go figure。

bool _MyProp; 
public bool MyProp 
{ 
    get { return _MyProp; } 
    set 
    { 
     if(_MyProp!=value){ 
      _MyProp=value; 
      var col=tbl.Columns.SingleOrDefault(x=>x.Name=="MyProp"); 
      if(col!=null){ 
       if(!_dirtyColumns.Any(x=>x.Name==col.Name) && **_isLoaded**){ 
        _dirtyColumns.Add(col); 
       } 
      } 
      OnChanged(); 
     } 
    } 
} 

実際にDBからオブジェクトがロードされていない限り、メンバ変数_isLoadedがどのようにfalseであるかを参照してください。 Subsonicは自分のプロパティを汚れた列のリストに追加しません。

あなたのリポジトリ保存()メソッドは、このような何かを見なければならないでしょう

:あなたが行うことができます

public MyObject Save(Myobject myObject) 
{ 
    myObject.Save(); 
    myObject= MyObject.SingleOrDefault(x => x.Id == myObject.Id); 
    return myObject; 
} 

public MyObject Save(Myobject myObject) 
{ 
    myObject.Save(); 
    myObject= MyObject.SingleOrDefault(x => x.Id == myObject.Id); 
    return myObject; 
} 
1

代わりの

myObject.SetIsLoaded(true); 

これは必要がなくなりますがデータベースサーバーに再度照会してください。例えば

myObject.Save(); 
myObject.Name ="Something else"; 
myObject.SetIsLoaded(true); 
myObject.Save(); 
関連する問題