저는 데이터 바인딩, 모델 및 뷰 모델 생성 및 레코드 업데이트와 같은 비즈니스 응용 프로그램에 대한 일반적인 작업을 자동화하기 위해 C#에서 간단한 코드 생성기를 작성하고 있습니다.ORM에서 레코드 업데이트를 구현하는 가장 좋은 방법은 무엇입니까?
생성 된 코드는 참조 비교 (id 제외) 및 일시적인 상태의 플래그 등록 정보 (객체가 작성되었지만 유지되지 않은 경우)로 equallity를 구현하는 데이터 매퍼를 사용합니다. 단지 immediatly 하나 개의 컬럼에 대한 업데이 트를 호출
속성 세터에 : 개체 속성을 업데이트
나는 3 가지 옵션이 있습니다. 이것은 최종 프로그래머가 관리하는 다른 메카니즘없이 즉각적인 지속성을 제공하지만, 불필요한 UPDATE 호출 횟수와Mantain a 속성 집합을 막는 모든 개체의 고정 상태와 BeginModification 및 EndModification 메서드, 속성 설정자를 활성화하고 EndModification에서 수정 된 모든 열을 업데이트합니다. 코드 단순화 및 프로그래머 개입 감소가 주요 목표이기 때문에 프로그래머는 코드 생성기에 바람직하지 않은이 메서드를 호출해야합니다.
Mantain (글로벌 타이머 및 로컬로 구현 될 수있는 타이머) 카운터)를 사용하고 엔티티에 특정 "더티 타임"을 부여하면 속성이 설정되면 더티 타임이 0으로 재설정되고 로컬 시계가 특정 값으로 변경되면 열 UPDATE가 수행됩니다. contiguos 속성 집합 사이에 거의 0 시간이 있기 때문에 이것은 외부 최종 프로그래머 코드를 요구하지 않고 단일 UPDATE에 여러 속성 집합을 그룹화합니다.
타이머 aproach 내 선호하는 방법은 지역 더러운 타이머가
를 원하는 경우 immediatly 업데이트를 호출 할 것입니다 CommitChanges 방법과 결합 될 수 있기 때문에 속성 집합 외에 제로 프로그래머의 개입있는 posibility 질문 is : 이 타이머가 데이터 불일치로 이어질 가능성이 있습니까?
타이머 아이디어를 완전히 이해하지 못했습니다. 타이머가 왜 필요한가요? –
Microsoft SQL Server를 사용할 수 있다면 Ima는 PetaPoco와 결합 된 Visual Studio SQL 데이터베이스 프로젝트가 바퀴를 재발견하지 않고도 오늘날의 기술로 구축 할 수있는 최상의 시스템입니다.Visual Studio의 Database 프로젝트를 사용하면 SQL의 'Tables/stored procedures'등을 100 % 제어 할 수 있으며 쉽게 배포하고 스키마 업데이트/합병을 처리 할 수 있습니다. 그리고 페타 포코는 아마도 당신이 사용할 수있는 가장 빠른 (마이크로 오옴) 것입니다. 우리는이 방법과 petapoco의 TT 템플릿을 사용하여 pocos를 생성합니다. –
타이머는 CommitChanges 메서드의 필요성을 제거하기위한 것으로, 이제는 이것이 나쁜 생각이며 데이터 변경이 명시 적으로 이루어져야한다는 것을 이해했습니다. 생성 된 코드는 이미 Entity Framework 및 SqlServer .net api와 함께 작동하며 데이터베이스 스키마 모델 (테이블 및 저장 프로 시저에만 해당)을 지원합니다. 다중 플랫폼 및 다중 RDBMS 코드를 생성하는 것이 목표이기 때문에 우리는 단순하지만 기능적 인 ORM을 작성하여 모두 비슷한 데이터 레이어로 작업하기로 결정했습니다. – rafael