Dapper.Rainbow VS Dapper.Contrib
누군가 Dapper.Rainbow 와 Dapper.Contrib 의 차이점을 설명해 주 시겠습니까?
Dapper.Contrib의 SqlMapperExtensions.cs를 언제 사용하고 Dapper.Rainbow를 언제 사용해야합니까?
나는 한동안 Dapper를 사용해 왔으며 Contrib 과 Rainbow 프로젝트가 나 자신에 관한 것이 무엇인지 궁금해했습니다 . 약간의 코드 검토 후 사용에 대한 내 생각은 다음과 같습니다.
Dapper.Contrib
Contrib은 기본 CRUD 작업을 위해 IDbConnection 인터페이스에서 확장 메서드 집합을 제공합니다.
- 가져 오기
- 끼워 넣다
- 최신 정보
- 지우다
Contrib의 핵심 구성 요소는 변경 사항이 있는지 식별하기 위해 엔티티에 대한 추적 기능을 제공한다는 것입니다.
예를 들어, 인터페이스와 함께 Get 메서드를 형식 제약 조건으로 사용하면 변경된 속성을 추적하기 위해 내부 사전이있는 동적으로 생성 된 프록시 클래스가 반환됩니다.
그런 다음 변경된 속성 만 업데이트하는 데 필요한 SQL을 생성하는 Update 메서드를 사용할 수 있습니다.
주요 경고 : Contrib의 추적 기능을 얻으려면 인터페이스를 유형 제약 조건으로 사용하여 프록시 클래스를 생성해야합니다.
Dapper.Rainbow
Rainbow는 기본 CRUD 작업을 제공하기 위해 Dapper 클래스의 기본 클래스로 사용할 수있는 추상 클래스입니다.
- 가져 오기
- 끼워 넣다
- 최신 정보
- 지우다
First (테이블의 첫 번째 레코드 가져 오기) 및 All (테이블의 모든 결과 레코드 가져 오기)과 같이 일반적으로 사용되는 몇 가지 방법도 있습니다.
모든 의도와 목적을 위해 Rainbow는 기본적으로 가장 일반적으로 사용되는 데이터베이스 상호 작용을위한 래퍼이며 속성 이름 및 유형 제약 조건을 기반으로 지루한 SQL을 구축합니다.
예를 들어, Get 작업을 통해 Rainbow는 바닐라 SQL 쿼리를 작성하고 모든 열을 반환 한 다음 해당 값을 제약 조건으로 사용되는 유형에 다시 매핑합니다.
마찬가지로, 삽입 / 업데이트 메서드는 유형 제약 조건의 속성 이름을 기반으로 삽입 / 업데이트에 필요한 SQL을 동적으로 빌드합니다.
주요주의 사항 : Rainbow는 모든 테이블에 "Id"라는 ID 열이있을 것으로 예상합니다.
차이점?
Contrib과 Rainbow의 주요 차이점은 (IMO)입니다. 하나는 엔티티의 변경 사항을 추적하고 다른 하나는 다음을 수행하지 않습니다.
- 엔티티의 변경 사항을 추적하려면 Contrib을 사용하십시오.
- 표준 ADO.NET 접근 방식을 따라 더 많은 것을 사용하려면 Rainbow를 사용하십시오.
참고로 Dapper와 함께 사용하는 매우 유사한 기본 클래스를 구축했기 때문에 이전에 Rainbow를 살펴 보았 으면합니다.
기사에서 @anthonyv 인용 인용 : 성가신 INSERT 문제, 데이터를 DB로 가져 오기
이제 2 개의 다른 API도 선택할 수 있습니다 ( Rainbow 외에 ) (CRUD 용) Dapper.Contrib 및 Dapper Extensions . 나는 그것이 모든 것에 적합하다고 생각하지 않는다. 문제와 선호도에 따라 가장 잘 작동하는 API가있을 수 있습니다. 몇 가지 옵션을 제시하려고했습니다. 세상의 모든 문제를 해결하는 축복받은“최선의 방법”은 없습니다.
Sam이 위의 인용문과 관련 블로그 게시물에서 전달하려는 내용은 다음과 같습니다. 시나리오에 많은 사용자 지정 매핑 (바닐라 Dapper 사용)이 필요하거나 엔터티 변경 사항을 추적해야 할 수 있습니다 (Contrib 사용). 일반적인 사용 시나리오 (Rainbow 사용)가 있거나 모두 조합하여 사용할 수 있습니다. 또는 Dapper를 사용하지 마십시오. YMMV.
Adam Anderson의이 게시물 은 여러 CRUD Dapper 확장 라이브러리의 차이점을 설명합니다.
- Dapper Contrib (자동 변경 추적-더티 여부 만, 사용자 지정 매핑 속성, 복합 키 지원 없음, 수동 키 지원 없음)
- Dapper Rainbow (Snapshotter를 사용한 수동 변경 추적, 사용자 지정 매핑 속성, 복합 키 지원 없음, 수동 키 지원 없음)
- Dapper 확장 (변경 추적 없음, 사용자 지정 매핑을위한 Fluent 구성, 복합 키 지원, 수동 키 사양 지원), 간단한 쿼리를위한 조건 자 시스템도 포함
- Dapper SimpleCRUD (변경 사항 추적 없음, 사용자 지정 매핑 속성, 복합 키 지원 없음, 수동 키 사양 지원), 필터링 / 페이징 도우미, 비동기 지원, 자동 POCO 클래스 생성 (T4를 통해)도 포함합니다.
Sam은 자신의 게시물 ( http://samsaffron.com/archive/2012/01/16/that-annoying-insert-problem-getting-data-into-the-db-using-dapper )에서 차이점에 대해 자세히 설명 합니다.
기본적으로 일반적인 크기는 1 개가 아닌 모든 답변에 적합하며 필요에 따라 어떤 접근 방식을 사용할지 결정하는 것은 우리에게 달려 있습니다.
이제 2 개의 다른 API도 선택할 수 있습니다 ( Rainbow 외에 ) (CRUD 용) Dapper.Contrib 및 Dapper Extensions . 나는 그것이 모든 것에 적합하다고 생각하지 않는다. 문제와 선호도에 따라 가장 잘 작동하는 API가있을 수 있습니다. 몇 가지 옵션을 제시하려고했습니다. 세상의 모든 문제를 해결하는 축복받은“최선의 방법”은 없습니다.
참고 URL : https://stackoverflow.com/questions/10030285/dapper-rainbow-vs-dapper-contrib
'Program Tip' 카테고리의 다른 글
다른 테이블에서 행 업데이트 (0) | 2020.11.21 |
---|---|
기본 new 및 delete 연산자를 대체하는 이유는 무엇입니까? (0) | 2020.11.21 |
Django 로그 및 오류 위치 (0) | 2020.11.21 |
SOAP 웹 서비스는 "POST"http 메소드 만 지원합니까? (0) | 2020.11.21 |
AzureWebJobsDashboard 연결 문자열 정보는 어디서 얻을 수 있나요? (0) | 2020.11.21 |