2009-08-18 61 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,那么这个哈希将需要在代码中完成保存,编辑行。