2009-08-18 58 views
2

使用SubSonic 3/ActiveRecord,是否有一種比較兩條記錄的簡單方法,無需逐列比較。例如,我想,做這樣的事情的函數(無需編寫爲每個表自定義比較在我的數據庫):SubSonic 3/ActiveRecord - 比較兩條記錄的簡單方法?

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; 
    } 
} 

最後,我真正需要的是一個用於測試功能兩行之間的平等,不包括主鍵列。上面的僞代碼是一個更一般的形式。我相信,一旦我得到不匹配的列,我將能夠檢查是否有任何列是主鍵字段。

我查看了Columns屬性,但沒有找到任何可以使用的東西。理想情況下,解決方案將是我可以在t4文件中折騰併爲數據庫中的所有表生成的。

+0

最好的辦法可能是將一個表的列的哈希函數添加到t4模板中。那麼這將是一個非常簡單的比較。那麼構建一個合適的哈希程序就會成爲問題。 :( 不知道如何將工作,因此我已經提到它作爲一個評論,而不是一個答案。 – BlackMael 2009-08-22 23:56:18

+0

這可以通過比較ActiveRecord對象中所有列的自定義比較器來完成嗎? – CmdrTallen 2009-08-28 13:53:38

回答

1

如果使用SQL Server作爲後端,最好的方法是自動填充,那就是創建一個派生列,該派生列使用CHECKSUM來散列「selected」列的值以形成唯一性主鍵。

編輯:如果你沒有使用SQL Server,那麼這個哈希將需要在代碼中完成保存,編輯行。