2014-12-14 9 views
0

저는 데이터 바인딩, 모델 및 뷰 모델 생성 및 레코드 업데이트와 같은 비즈니스 응용 프로그램에 대한 일반적인 작업을 자동화하기 위해 C#에서 간단한 코드 생성기를 작성하고 있습니다.ORM에서 레코드 업데이트를 구현하는 가장 좋은 방법은 무엇입니까?

생성 된 코드는 참조 비교 (id 제외) 및 일시적인 상태의 플래그 등록 정보 (객체가 작성되었지만 유지되지 않은 경우)로 equallity를 구현하는 데이터 매퍼를 사용합니다. 단지 immediatly 하나 개의 컬럼에 대한 업데이 트를 호출

  • 속성 세터에 : 개체 속성을 업데이트

    나는 3 가지 옵션이 있습니다. 이것은 최종 프로그래머가 관리하는 다른 메카니즘없이 즉각적인 지속성을 제공하지만, 불필요한 UPDATE 호출 횟수와

  • Mantain a 속성 집합을 막는 모든 개체의 고정 상태와 BeginModification 및 EndModification 메서드, 속성 설정자를 활성화하고 EndModification에서 수정 된 모든 열을 업데이트합니다. 코드 단순화 및 프로그래머 개입 감소가 주요 목표이기 때문에 프로그래머는 코드 생성기에 바람직하지 않은이 메서드를 호출해야합니다.

  • Mantain (글로벌 타이머 및 로컬로 구현 될 수있는 타이머) 카운터)를 사용하고 엔티티에 특정 "더티 타임"을 부여하면 속성이 설정되면 더티 타임이 0으로 재설정되고 로컬 시계가 특정 값으로 변경되면 열 UPDATE가 수행됩니다. contiguos 속성 집합 사이에 거의 0 시간이 있기 때문에 이것은 외부 최종 프로그래머 코드를 요구하지 않고 단일 UPDATE에 여러 속성 집합을 그룹화합니다.

타이머 aproach 내 선호하는 방법은 지역 더러운 타이머가

를 원하는 경우 immediatly 업데이트를 호출 할 것입니다 CommitChanges 방법과 결합 될 수 있기 때문에 속성 집합 외에 제로 프로그래머의 개입있는 posibility 질문 is : 이 타이머가 데이터 불일치로 이어질 가능성이 있습니까?

+0

타이머 아이디어를 완전히 이해하지 못했습니다. 타이머가 왜 필요한가요? –

+0

Microsoft SQL Server를 사용할 수 있다면 Ima는 PetaPoco와 결합 된 Visual Studio SQL 데이터베이스 프로젝트가 바퀴를 재발견하지 않고도 오늘날의 기술로 구축 할 수있는 최상의 시스템입니다.Visual Studio의 Database 프로젝트를 사용하면 SQL의 'Tables/stored procedures'등을 100 % 제어 할 수 있으며 쉽게 배포하고 스키마 업데이트/합병을 처리 할 수 ​​있습니다. 그리고 페타 포코는 아마도 당신이 사용할 수있는 가장 빠른 (마이크로 오옴) 것입니다. 우리는이 방법과 petapoco의 TT 템플릿을 사용하여 pocos를 생성합니다. –

+0

타이머는 CommitChanges 메서드의 필요성을 제거하기위한 것으로, 이제는 이것이 나쁜 생각이며 데이터 변경이 명시 적으로 이루어져야한다는 것을 이해했습니다. 생성 된 코드는 이미 Entity Framework 및 SqlServer .net api와 함께 작동하며 데이터베이스 스키마 모델 (테이블 및 저장 프로 시저에만 해당)을 지원합니다. 다중 플랫폼 및 다중 RDBMS 코드를 생성하는 것이 목표이기 때문에 우리는 단순하지만 기능적 인 ORM을 작성하여 모두 비슷한 데이터 레이어로 작업하기로 결정했습니다. – rafael

답변

1

교육 실습이나 설계 기술을 연마하기위한 수단으로 이것을 쓰려면 위대한 분입니다. 실제로 ORM이 필요하기 때문에이 글을 쓰고 있다면 많은 기존 ORM 중 하나를 보는 것이 훨씬 현명한 아이디어라고 제안 할 것입니다. 엔티티 프레임 워크 (Entity Framework), NHinbernate (NHinbernate) 등의 제품에는 이미이를 유지 관리하는 사람들이 있으므로 자신의 ORM을 롤업하는 것보다 훨씬 더 실용적인 옵션을 제공합니다.

즉, 나는 자동 데이터베이스 업데이트를 꺼려한다. 대부분의 기존 ORM은 엔티티 레벨에 상태 정보를 저장하는 패턴을 따릅니다 (일반적으로 엔티티는 테이블의 단일 행을 나타내지 만 엔티티는 물론 다른 엔티티와 관련 될 수 있음). 개발자가 명시 적으로 함수를 호출하여 변경 사항을 커밋합니다. 그렇게해라. 이는 타이머 접근 방식과 유사하지만 ... 음 ... 타이머가 없습니다. Winforms 응용 프로그램과 같은 것을 작성하고 사용자가 데이터 바인딩을 통해 속성을 업데이트하는 경우 변경 내용을 자동으로 커밋하는 것이 좋을 수 있지만 일반적으로 유틸리티 클래스 (예 : 사용자 지정 바인딩 목록 구현)를 사용하면 더 효율적으로 수행 할 수 있습니다. 변경 사항을 감지하고 자동으로 커밋합니다.

+0

감사합니다!, 명시 적 커밋이 그 다음에 있습니다. – rafael