2010-05-20 4 views
1

LINQ to SQL에서 다른 열이 변경되지 않은 경우 일부 열을 설정하지 않으려합니다. --that입니다 필요 경우에만 LINQ는 SQL에 행을 가져 오는 메모리에 "예"로 이름을 설정하고, 업데이트 SQL 쿼리를 생성 그래서,Linq To SQL을 사용할 때 다른 컬럼이 변경되지 않은 경우 일부 컬럼 설정을 피할 수 있습니까?

dim row = (From c in dataContext.Customers Where c.Id = 1234 Select c).Single() 
row.Name = "Example" 
' line 3 
dataContext.SubmitChanges() ' line 4 

큰 말해봐 , 어떤 SQL은 없을 것입니다 고객의 이름이 이미 "예"인 경우 생성됩니다.

그래서 3 행에서 행이 변경되었는지 감지하고 싶다면 row.UpdateDate = DateTime.Now를 설정하십시오. 행이 변경되지 않은 경우 row.UpdateDate를 설정하여 SQL이 생성되지 않도록하고 싶습니다. 이 작업을 수행하는 좋은 방법이 있습니까?

+0

이것은 OR 추상화의 추악한면입니다. 이 문제에 신경 쓰지 않아도되는 방법이 있습니까? 즉, 어떻게 든 OR 맵을 설정하여 다른 열이 변경 될 때마다 row.UpdateDate를 자동으로 업데이트 할 수 있습니까? –

답변

1

당신이 속성을 설정하기 때문에 이것을 수행하는 기본 방법이 있는지 확실하지 않으므로 다음과 같이 구현할 수 있습니다.

Dim row = (From c in dataContext.Customers Where c.id = 1234 Select c).Single 
if (row.Name <> "Example") Then 
    row.Name = "Example" 
    row.UpdateDate = DateTime.Now 
End If 
datacontext.SubmitChanges() 

편집

하여 PropertyChanged 이벤트는에 훅 수있는 데이터 컨텍스트 클래스의 내부에있다.

그래서 당신은

같은 뭔가를 할 수

AddHandler에 row.PropertyChanged, AddressOf를 UpdateRowDate

난 내 머리 위로 떨어져 실제 코드의 생각하지만, Linq에 - 투 - SQL 실체이기 때문에 할 수
+0

그건 내가 두려워했던거야. 설정할 열이 10 개있는 경우 상상할 수 있습니다. 그런 다음 조건부로 10 개의 조건부를 관리해야합니다. 방금 말한 방법을 기대하고 있습니다. [If row.HasChanged() Then row.UpdateDate = DateTime.Now] 행에 메모리가 변경되었는지 감지하는 방법을 알고 있다면 직접 메서드를 작성할 수 있습니다. –

+0

은 생성 된 datacontext 클래스를보고 나서 편집했습니다. – msarchet

+0

PropertyChanged를 사용할 수 있지만 성가신 문제입니다. –

0

부분 클래스는 일부 논리를 확장하여이를 확인합니다. 모든 속성은 이벤트가 변경 될 때 이벤트를 가지므로 부분 클래스에서 속성이 변경된 이벤트에 바인딩하고 개체에 UpdateDate를 설정해야합니다.

관련 문제