Dapper.Rainbow VS Dapper.Contrib

dapper dapper-rainbow orm

문제

누군가 Dapper.RainbowDapper.Contrib 의 차이점을 설명해 시겠습니까?

언제 Dapper.Contrib의 SqlMapperExtensions.cs를 언제 사용하며 Dapper.Rainbow를 사용해야합니까?

수락 된 답변

Dapper를 잠시 사용 해왔고 ContribRainbow 프로젝트가 모두 나 자신에 관한 것인지 궁금해했습니다. 약간의 코드 리뷰 이후에, 그들의 사용에 대한 나의 생각은 다음과 같습니다 :

Dapper.Contrib

Contrib는 기본 CRUD 작업을위한 IDbConnection 인터페이스의 확장 메서드 집합을 제공합니다.

  • 도망
  • 끼워 넣다
  • 최신 정보
  • 지우다

Contrib의 핵심 구성 요소는 변경 사항이 있는지 여부를 확인하기 위해 엔티티에 대한 추적을 제공한다는 것입니다.

예를 들어 형식 제약 조건으로 인터페이스와 함께 Get 메서드를 사용하면 내부 사전과 함께 동적으로 생성 된 프록시 클래스가 반환되어 어떤 속성이 변경되었는지 추적 할 수 있습니다.

그런 다음 변경된 속성 만 업데이트하는 데 필요한 SQL을 생성하는 Update 메서드를 사용할 수 있습니다.

주요주의 사항 : Contrib의 추적 기능을 사용하려면 인터페이스를 유형 제약 조건으로 사용하여 프록시 클래스를 생성 할 수 있어야합니다.

어퍼. 레인보우

Rainbow는 Dapper 클래스의 기본 클래스로 사용하여 기본 CRUD 작업을 제공 할 수있는 Abstract 클래스입니다.

  • 도망
  • 끼워 넣다
  • 최신 정보
  • 지우다

첫 번째 (테이블의 첫 번째 레코드 가져 오기) 및 All (모든 결과 레코드를 테이블에 가져옴)과 같이 일반적으로 사용되는 메서드도 마찬가지입니다.

모든 의도와 목적을 위해 Rainbow는 기본적으로 가장 일반적으로 사용되는 데이터베이스 상호 작용의 래퍼이며 속성 이름과 유형 제약 조건에 따라 지루한 SQL을 구축합니다.

예를 들어 Get 연산을 사용하면 Rainbow는 바닐라 SQL 쿼리를 작성하고 모든 열을 반환 한 다음 해당 값을 제약 조건으로 사용 된 유형으로 다시 매핑합니다.

마찬가지로 삽입 / 업데이트 메소드는 유형 제약 조건의 속성 이름을 기반으로 삽입 / 업데이트에 필요한 SQL을 동적으로 작성합니다.

주요 경고 : Rainbow은 모든 테이블이 "Id"라는 ID 열을 가질 것으로 기대합니다.

차이점은 무엇입니까?

Contrib과 Rainbow의 주요 차이점은 (IMO)이며, 엔티티의 변경 사항을 추적하고, 다른 하나는 변경하지 않습니다.

  • 엔티티에서 변경 내용을 추적 할 수있게하려면 Contrib를 사용하십시오.
  • 표준 ADO.NET 접근 방식을 따라 뭔가를 사용하고자 할 때 Rainbow를 사용하십시오.

사이드 노트 : Dapper와 아주 비슷한 기본 클래스를 구축 했으므로 Rainbow을 처음부터 살펴 보았 으면합니다.


@anthonyv가 인용 한 기사와 인용문에서 : 귀찮은 INSERT 문제, DB로 데이터 가져 오기

이제 Rainbow 외에 (CRUD 용) Dapper.ContribDapper Extension 중에서 선택할 수있는 2 개의 다른 API가 있습니다. 나는 그 모든 것이 맞다고 생각하지 않는다. 문제 및 환경 설정에 따라 가장 적합한 API가있을 수 있습니다. 나는 몇 가지 옵션을 제시하려고 노력했다. 전 세계의 모든 문제를 해결할 축복받은 "최선의 방법"은 없습니다.

샘이 위의 인용문에서 전달하려고 한 내용과 관련 블로그 게시물이 의심 스럽습니다. 시나리오에 많은 맞춤 매핑 (바닐라 더퍼 사용)이 필요하거나 엔티티 변경 사항 (Contrib 사용)을 추적해야 할 수도 있습니다. 일반적인 사용 시나리오 (Rainbow 사용)가 있거나 모두 조합하여 사용할 수 있습니다. Dapper도 사용하지 마십시오. YMMV.


인기 답변

Adam Anderson의이 게시물 은 여러 CRUD Dapper 확장 라이브러리의 차이점을 설명합니다.

  • Dapper Contrib (자동 변경 추적 - 지저분한 경우에만, 맞춤 매핑을위한 속성, 복합 키 지원 없음, 수동 키 지원 없음)
  • Dapper Rainbow (Snapshotter를 사용한 수동 변경 추적, 사용자 정의 매핑을위한 속성, 복합 키 지원 없음, 수동 키 지원 없음)
  • Dapper Extensions (변경 추적 없음, 사용자 정의 매핑에 대한 Fluent 구성, 복합 키 지원, 수동 키 지정 지원), 간단한 쿼리를위한 조건부 시스템 포함
  • Dapper SimpleCRUD (변경 추적 없음, 사용자 정의 매핑을위한 속성, 복합 키 지원 없음, 수동 키 지정 지원), 필터링 / 페이징 헬퍼, 비동기 지원, 자동 POCO 클래스 생성 (T4까지)

대퍼 확장 기능 차이




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.