SubSonic 3 / ActiveRecord - 比较两个记录的简便方法?

时间:2009-08-18 22:58:42

标签: subsonic subsonic3

使用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文件中投入并为数据库中的所有表生成的。

1 个答案:

答案 0 :(得分:1)

最好的方法是,如果使用SQL Server作为后端,因为这可以自动填充,是创建一个派生列,其定义使用CHECKSUM来散列“selected”列的值以形成外部的唯一性主键。

编辑:如果您没有使用SQL Server,则需要在保存,编辑行时在代码中完成此哈希。