使用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 :(得分:1)
最好的方法是,如果使用SQL Server作为后端,因为这可以自动填充,是创建一个派生列,其定义使用CHECKSUM来散列“selected”列的值以形成外部的唯一性主键。
编辑:如果您没有使用SQL Server,则需要在保存,编辑行时在代码中完成此哈希。