2010-04-06 1 views
0

나는 성공적으로 사용하고있는 Linq-to-Sql 기반 저장소 클래스가 있습니다. 솔루션에 WCF 기반 액세스를 제공하는 일부 기능을 추가하려고합니다.Linq-To-Sql with WCF, 모델 및 POCO ViewModels 연결이 끊긴 "DataContext"타임 스탬프/Rowversion

나는 생성 된 Linq 클래스를 DataContracts로 노출시키지 않았으며 대신 반환 할 각 엔터티에 대해 자체 "ViewModel"을 POCO로 만들었습니다.

제 질문은 업데이트를 수행하고 내 서비스 내에서 순환 참조와 같은 일부 Linq-To-Sql 기능을 사용하기 위해 데이터베이스별로 각 테이블에 Rowversion/Timestamp 필드를 추가해야합니까? 그래서 dc.Table.Attach(myDisconnectedObject) 같은 코드를 사용할 수 있습니까? alternitive은, 추한 것 같다

var updateModel = dc.Table.SingleOrDefault(t => t.ID == myDisconnectedObject.ID); 
updateModel.PropertyA = myDisconnectedObject.PropertyA; 
updateModel.PropertyB = myDisconnectedObject.PropertyB; 
updateModel.PropertyC = myDisconnectedObject.PropertyC; 
// and so on and so forth 
dc.SubmitChanges(); 
+0

리플렉션을 사용하여 모든 필드가 linq 및 자신의 클래스에서 동일한 이름을 가진 경우 필드를 설정할 수도 있습니다. – vittore

+0

그와 같은 성능은 어떻습니까? 당신이 예제를 게시 할 수 있습니다. 왜냐하면 저에게 두 세계의 장점처럼 * 들립니다. 데이터베이스 필드를 추가하고 디자이너가 최신 버전인지 확인하는 등의 코드 업데이트에 대해 걱정할 필요가 없습니다. – Nate

답변

1

내가 최고와 최소 침해 옵션이 될 수있는 각 테이블에 RowVersion/타임 스탬프 열을 맞춰 - 다만 기본적으로 하나 개 값을 확인하고, 당신이있어 확인 데이터 여부 뜻있는 시간에 수정되었을 수도 있습니다. 다른 모든 열은 Update Check=Never으로 설정할 수 있습니다. 이것은 "반환"객체에서 데이터베이스를 업데이트 할 때 발생할 수있는 동시성 문제를 처리합니다.

그러나 분명히 알아둬야 할 다른 것은 AutoMapper입니다. ViewModels/Data Transfer Objects를 사용할 때 두 개의 객체 사이에이 매핑을 만들어야 할 때 왼쪽에서 오른쪽으로 할당되는 orgies를 쉽게 처리 할 수있는 훌륭한 구성 요소입니다. 스냅을 입력합니다. 잘 사용되었고, 잘 테스트되었고, 많은 사람들이 매우 안정적으로 사용했습니다.

+0

Left-right-assignment 코드를 처리하기 위해 Reflection을 사용하는 것에 대한 내 질문에 대한 의견에 대한 귀하의 생각은 무엇입니까? – Nate

+0

@Nate : 기본적으로 AutoMapper가하는 일입니다. 멋지게 포장 된 패키지에서 너무 많은 피투성이의 세부 사항을 다룰 필요가 없습니다. –

관련 문제