2009-08-18 3 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

+0

ActiveRecord 개체의 모든 열을 비교하는 사용자 지정 비교기로이 작업을 수행 할 수 있습니까? – CmdrTallen

답변

1

SQL Server를 자동으로 채울 수있는 백엔드로 사용하는 가장 좋은 방법은 CHECKSUM을 사용하여 "선택한"열의 값을 해시하는 정의가있는 파생 열을 만들어서 외부의 고유성을 형성하는 것입니다 기본 키.

편집 : SQL Server를 사용하지 않는 경우이 해시를 저장하고 편집 할 때 코드에서 수행해야합니다.