Dapper : 특정 유형의 특정 필드에 대한 유형 매핑을 사용자 정의 할 수 있습니까?

c# dapper micro-orm sql

문제

User 클래스가 있다고 가정 해 보겠습니다.

public class User
{
    public int      ID          { get; set; }
    public string   FirstName   { get; set; }
    public string   LastName    { get; set; }
    public string   Email       { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime LastLogin   { get; set; }
}

다음 표에 매핑 할 항목 :

CREATE TABLE "user" (
  "ID"          int(11) NOT NULL AUTO_INCREMENT,
  "FirstName"   varchar(45) DEFAULT NULL,
  "LastName"    varchar(45) DEFAULT NULL,
  "Email"       varchar(255) NOT NULL,
  "DateCreated" int(11) NOT NULL,
  "LastLogin"   int(11) NOT NULL,
  PRIMARY KEY ("ID")
)

또는 간단한 단어를 넣으십시오 : 데이터베이스의 int 필드로 DateTime 속성을 저장하고 싶습니다. 그러나이 클래스 / 테이블의 경우입니다. 다른 클래스 / 테이블은 다르게 매핑 될 수 있습니다. 유형 또는 멤버 맵과 함께 사용자 지정 변환 함수의 라인을 따라 뭔가를 생각하고있었습니다.

Dapper를 사용하여이 작업을 수행 할 수 있습니까? 그렇다면 어떻게해야합니까?

수락 된 답변

결론은 Dapper가 설계 상이를 지원하지 않는다는 것입니다. 핵심 설계 원칙 중 하나는 테이블과 오브젝트 간의 1 : 1 맵핑입니다 (컬럼 이름과 특성 이름 맵핑 제외).

내가 끝으로 갈 해결책은 Dapper와 AutoMapper를 결합하는 것이 었습니다. AutoMapper는 이미 이미 많이 사용하고 있습니다. Dapper DAO에서는 복잡한 경우에 도메인 객체와 별도의 엔티티 객체를 사용하고 그 사이에 매핑합니다. 따라서 본질적으로 도메인과 테이블 간의 사소한 매핑은 객체 대 객체 매핑의 간단한 문제가됩니다.


인기 답변

이제 사용자 지정 SqlMapper.TypeHandler 할 수 있습니다. 단위 테스트 에서이 예제를 참조하십시오. 단점은 동일한 유형의 모든 필드에 사용자 정의 유형 처리를 적용한다는 것입니다. 귀하의 경우 모든 DateTime 속성은 형식 처리기를 통해 평가됩니다.



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