2009-08-18 16 views
2

SubSonic 3/ActiveRecordでは、各列を列ごとに比較することなく、2つのレコードを比較する簡単な方法があります。例えば、私は(私のデータベース内の各テーブルのカスタム比較子を記述することなく)このような何かを行う機能が欲しい:最後にSubSonic 3/ActiveRecord - 2つのレコードを簡単に比較できますか?

public partial class MyTable 
{ 
    public IList<SubSonic.Schema.IColumn> Compare(MyTable m) 
    { 
     IList<SubSonic.Schema.IColumn> columnsThatDontMatch = new...; 
     if (this.Field1 != m.Field1) 
     { 
      columnsThatDontMatch.add(Field1_Column); 
     } 
     if (this.Field2 != m.Field2) 
     { 
      columnsThatDontMatch.add(Field2_Column); 
     } 
     ... 
     return columnsThatDontMatch; 
    } 
} 

を、私が本当に必要なのテスト関数であります主キー列を除く、2つの行が等しいかどうかを確認します。上記の擬似コードはこれのより一般的な形式です。私は一致しない列を取得すると、いずれかの列が主キーフィールドであるかどうかを確認できます。

私は何も見つけずにColumnsプロパティを調べました。理想的には、ソリューションはt4ファイルで投げて、データベース内のすべてのテーブルに対して生成できるものです。

+0

テーブルの列に対してハッシュ関数をt4テンプレートに追加するのが最善の方法です。それは非常に単純な比較になります。適切なハッシングルーチンを構築することが問題になります。 : これで動作するかどうかわかりませんので、私はこれをコメントであり答えは言及していません。 – BlackMael

+0

これは、ActiveRecordオブジェクトのすべての列を比較するカスタムコンパレータで達成できますか? – CmdrTallen

答えて

1

SQL Serverをバックエンドとして使用する場合、CHECKSUMを使用して "選択された"列の値をハッシュして外部の一意性を形成する定義を持つ派生列を作成することが最良の方法です主キー

編集: SQL Serverを使用していない場合は、このハッシュを保存して編集する必要があります。

関連する問題