ADO.NET 데이터 서비스로 "최신 변경 항목을 얻는 방법"을 구현하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/720985

문제

한 명 이상의 사용자가 하나 이상의 사용자가 변경, 삭제 및 동시에 추가 할 수있는 엔티티 목록 (예 : TODO 항목 목록)이 있다고 가정 해 봅시다.

따라서 모든 클라이언트간에 나열된 동기화 된 Maintane을 위해 각 클라이언트 (AJAX 기반)가 XX 초마다 변경 사항을 요청하기를 원합니다. 목록이 길어질 수 있으므로 매번 전체 요청을하고 싶지는 않지만 변경된 항목 만 요구합니다 (항목을 업데이트, 삭제 또는 신규).

ado.net 데이터 서비스가 가능합니까? 그렇다면 서버에서 엔티티 프레임 워크를 사용하는 경우 어떻게 구현합니까?

변경 작업이 데이터 서비스에 제출 될 때 ASP.NETS 캐시를 사용하여 변경 항목을 저장하고 특정 클라이언트의 마지막 요청 이후 최신 변경 사항을 반환하는 사용자 정의 웹 메소드가 있습니다 (클라이언트를 통해 요청을 추적 할 수 있습니다. ASP.NETS 세션 객체). 그러나 결과 세트에서 개별 항목의 변경 상태 (예 : 삭제 또는 업데이트 또는 삽입)를 표시하는 방법을 모르겠습니다.

훌륭한 솔루션은 또한 클라이언트가 서버와 동일한 왕복의 많은 엔티티의 변경을 요청할 수있게 해줍니다.

모든 입력은 승인됩니다.

안부에, 에일.

도움이 되었습니까?

해결책

내 마음에 솟아 오르는 방식은 테이블에 세대 번호를 사용하는 것입니다. Todo 테이블에 Generation이라는 열을 제공하고 (정신적으로) 글로벌 및 지속적인 생성 수 변수를 연관시킵니다. (아마도 이것을 DB의 테이블에 넣는 것이 가장 좋습니다).

업데이트 또는 삽입이 이루어질 때마다 생성 번호가 증가하여 업데이트되거나 삽입 된 레코드의 생성 번호 열에 넣습니다.

레코드가 DB에서 처음 읽히고 웹 페이지에 올리면 현재 세대 번호도 검색되고 로컬로 캐시됩니다 (즉, JavaScript 변수에 넣습니다). 후속 Ajax Driven Reads는 Where 조항을 사용하여 로컬 캐시 된 생성 번호보다 생성 번호만으로 기록합니다. 이를 통해 새로운 업데이트 및 삭제 만 검색합니다. 로컬 캐시 생성 번호가 업데이트됩니다.

삭제는 조금 더 까다 롭습니다. 이를 수행하는 한 가지 방법은 제한된 기간 동안 묘비 삭제 된 레코드 (21 분)입니다. 묘비라는 비트 열과 DateTime 열이 있습니다. 레코드가 삭제되면 열에 삽입 또는 삭제와 동일한 방식으로 생성 번호가 설정되면 묘비 비트가 설정되고 DateTime은 getDate ()를 사용하여 현재 시간으로 설정됩니다. 클라이언트의 AJAX 요청은 묘비 플래그 세트로 레코드를 선택하여 클라이언트 측 목록에서 제거 할 수 있습니다. 클라이언트가 20 분마다 전체 페이지 새로 고침 또는 각 레코드를 가져 오는 Ajax 호출 후에 코딩 된 경우, DB 작업은 매 순간마다 실행되고 20보다 오래된 묘비 기록을 정리 (즉, 삭제) 할 수 있습니다. 분.

편집 : 실제로 생성 번호를 별도로 지속 할 필요가 없으며 생성 열에서 SQL 기능을 최대 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top