2009-04-03 7 views
2

Linq To Sql - 다른 테이블에서 값이 변경 될 때 데이터베이스의 한 테이블 값을 업데이트하는 가장 좋은 방법은 무엇입니까?Linq to Sql - 다른 값이 변경 될 때 값 업데이트

예를 들어 표 A에는 DateModified라는 열이 있습니다. TableA에는 TableB에 대한 연결이 있습니다. 이제 TableB에서 자식 레코드가 생성/업데이트/삭제 될 때마다 tableA에서 레코드가 변경 될 때마다 DateModified 필드의 값을 현재 날짜로 설정하려고합니다.

어떻게 달성 할 수 있습니까?

답변

4

변경 사항이 하나의 레코드에있는 경우 On*Changed 부분 메서드를 사용하거나 데이터 컨텍스트에서 SubmitChanges을 재정의하고 GetChangeSet으로 호출하고 업데이트하기 전에 변경 내용을 적용 할 수 있습니다. 후자 (데이터 - 컨텍스트) 접근 방식은 광범위한 변경 사항을 포착하는 데 유용합니다. On*Changed 접근법은 개별 속성에 특정한 논리에 유용합니다.

그러나 제시된 경우 (비 동등한 업데이트) 데이터베이스 트리거가 더 적절할 것으로 기대합니다.

+0

모든 변경 사항에서 업데이트 중이라면 모든 속성에 대해 On * Changed 메서드를 구현하지는 않지만 각 설정자가 성공하면 해당 열의 SendPropertyChanged가 실행되므로 PropertyChanged 처리기를 등록하십시오. – tvanfosson

+0

동의 - 트리거가 더 나은 방법입니다. – tvanfosson

0

중 하나는 삽입/당신이 TableA의에 업데이트를 수행하거나/업데이트 삽입을 할 수있는의 StoredProcedure를 통해 TableB의에 삭제/업데이트/TableB의에 트리거를 삭제 TableA의에게 내가이 작업을 수행하려고하지 않을

을 업데이트하는 할 LINQ에서는 다양한 IDE 생성 코드 구조 (유지 관리 악몽)를 무시하거나 데이터베이스에 대한 추가 호출을 수행하여 관련 TableA 항목을 가져옵니다.

2

OnCreated (부분 클래스에서 구현 됨)의 하위 엔터티에 PropertyChanged 이벤트 처리기를 등록하고 해당 처리기에서 부모 속성을 업데이트하도록 할 수 있습니다. 이미로드 된 클래스가 변경 사항에 관심이 없다면 DB 트리거를 @Marc로 사용하는 것이 좋습니다.

EDIT : 삭제를 catch해야하는 경우 데이터 컨텍스트에 delete partial 메서드를 구현하여 동일한 처리기 메서드를 호출하여 삭제할 엔터티의 부모를 업데이트 할 수 있습니다.

관련 문제