2011-10-17 1 views
0

SQL에 timestamp 열을 포함하는 클래스가있는 DBML이 있습니다. (여기에 지정된에만 관련 분야)Linq to sql timestamp 열은 항상 반환 됨

자동 생성 된 값 : 사실 이름 : 타임 스탬프 null 허용 : 거짓 Server 데이터 유형 : rowversion NOT NULL 출처 : 타임 스탬프

DBML의 특성은 다음과 같이 선언 타임 스탬프 : true 유형 : 이진 업데이트 확인 : never

제 논리에서이 테이블에 삽입합니다. 그러나, 나는 생성 된 SQL은 다음과 같은 형태 것을보고 놀랐어요 :

exec sp_executesql N'INSERT INTO [dbo].Foo(/* elided */) 
VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12, @p13, @p14, @p15, @p16, @p17, @p18, @p19, @p20, @p21, @p22, @p23, @p24, @p25) 

SELECT [t0].[Timestamp] 
FROM [dbo].[Foo] AS [t0] 
WHERE [t0].[Id] = @p26', /* elided */ 

내가 그 SELECT 문을 제거하고 싶습니다 - 나는 결과를 사용하지 마십시오.

가능합니까? 아니면 객체 추적을 위해 datacontext가 새 레코드의 타임 스탬프가 무엇인지 알아야합니다.

삽입 방법에 SP를 사용하는 것으로 전환 할 수는 있지만이를 피하는 것이 좋습니다.

답변

1

추가 선택은 후속 업데이트/삭제 절에 대한 동시성 검사에서 개체를 업데이트 할 때 개체의 로컬 인스턴스가 사용하는 타임 스탬프를 업데이트해야합니다. RowVersion (TimeStamp) 값은 행이 변경/삽입 될 때마다 업데이트되므로 클라이언트는 새 버전이 필요합니다. 그렇지 않으면 타임 스탬프 값이 더 이상 동일하지 않으므로 후속 업데이트가 실패합니다.

+0

완벽하게 이해할 수 있습니다. – Nik