Dapper의 매핑 엔티티

.net c# dapper mapping orm

문제

나는 Dapper로 작업을 시작했는데 엔티티를 데이터베이스의 테이블에 매핑하는 것과 같은 간단한 것을 찾지 못했습니다.

저장 프로 시저가 있습니다.

CREATE PROCEDURE [dbo].GetUserById (@UserId int)
AS  
begin               
        SELECT UserId,LastName,FirstName,EmailAddress
        FROM users
        WHERE UserID = @UserId

end
go

엔티티 :

public class User
{
    public int Id { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string Email { get; set; }
}

그리고 내 코드에서 매우 까다로운 쿼리 :

int userid=1;
    User User = connection.Query<User>("#GetUserById", new {userid=userid}, commandType: CommandType.StoredProcedure).FirstOrDefault();

내 질문은 : 어떻게 내 ID는 내 데이터베이스에서 Userid 사용자입니다 말할 수 있습니까?

EF에서 나는 다음과 같이 할 것입니다 :

MapSingleType(c => new
            {
                UserId = c.Id,
                Firstname = c.Firstname,
                Lastname = c.Lastname,
                EmailAddress = c.Email
            }).ToTable("users");

위의 내용을 어떻게하면 더할 나위없이 달성 할 수 있습니까?

수락 된 답변

Dapper는 의도적으로 매핑 레이어를 가지고 있지 않습니다. 그것은 작동 할 수있는 절대 최소값이며 솔직히 프로세스의 실제 시나리오 대부분을 포함합니다. 그러나 TSQL에서 별칭을 사용하지 않고 pass-thru 속성을 원하지 않는다고 올바르게 이해하면 비 일반적인 Query API를 사용하십시오.

User user = connection.Query("...", ...).Select(obj => new User {
           Id = (int) obj.UserId,
           FirstName = (string) obj.FirstName,
           LastName = (string) obj.LastName,
           Email = (string) obj.EmailAddress
        }).FirstOrDefault();

또는 단일 레코드의 경우보다 간단하게 :

var obj = connection.Query("...", ...).FirstOrDefault();
User user = new User {
      Id = (int) obj.UserId,
      FirstName = (string) obj.FirstName,
      LastName = (string) obj.LastName,
      Email = (string) obj.EmailAddress
};

비 트릭 Query(...) API는 열 이름 당 구성원을 제공하는 dynamic 사용합니다.


인기 답변

사용자 클래스는 쿼리에서 되돌아 오는 결과와 일치하도록 정의되어야합니다.

결과를 얻은 후에는 수동으로 다른 클래스에 매핑해야합니다 (또는 AutoMapper 사용)



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow