2017-02-19 2 views
0

내 쿼리에는 여러 테이블이 포함되어 있으며 Dapper에서 읽은 것으로부터 적어도 하나의 쿼리 만 이해하는 예제 만 찾을 수 있습니다. 다음은Dapper - 여러 모델 쿼리

는 모델 폴더 아래 제 3 개 클래스입니다 :

나는 그러나이 방법은 User 모델에 연결되어 내가 필요로하는 모든 정보를 얻을 수있는 다음 내 연결 코드와 방법을 가지고 내 저장소에서
public class User 
{ 
    public string UserName { get; set; } 
    public string UserId { get; set; } 
    public string Email { get; set; } 
    public string Phone { get; set; } 
} 

public class Date 
{ 
    public string UserName { get; set; } 
    public string UserCode { get; set; } 
    public string LastLogin { get; set; } 
} 

public class Photo 
{ 
    public class UserName { get; set; } 
    public string UserId { get; set; } 
    public string PhotoUrl { get; set; } 
} 

하지만 사진을 가져와야하므로 컴파운드 클래스를 만들려고하면 UserPhoto 모델을 볼 수 있으므로 User DataView 만 필요하다는 오류가 발생합니다. 당신을 말끔 넣어 새/부가 가치를 기대 -

public List<User> GetAll() 
{ 
    using (SqlConnection cn = new SqlConnection(connectionString)) 
    { 
     var allResults = cn.Query<User>("SELECT UserName, Email, Phone, (SELECT TOP 1 PhotoPath FROM Photo WHERE User.UserId = Photo.UserId) FROM User) 

답변

1

귀하의 User 클래스는 PhotoPath 같은 속성을 포함하지 않는 이유는 무엇입니까?

선택한 모든 속성이 포함 된 새 클래스 (예 : ViewModels/UserAndPhoto.cs)를 만들어야합니다. 그러면 Dapper가 데이터베이스에서 성공적으로 읽습니다.

+0

나는 User와 Photo가 서로 다른 클래스라고 생각한 두 개의 서로 다른 테이블이므로 항상 클래스가 데이터베이스의 테이블과 일치한다고 가정했습니다. 그렇지 않은가요? –

+0

EntityFramework에서 - 예, Dapper에서 - 아니요. 필드 (쿼리)를 이름으로 속성 (클래스)에 매핑하기 만하면됩니다. 데이터 유형 만 신경 써야합니다. – Dmitry

+0

클래스의 필드는 select 문에서 반환되는 열을 직접 반영해야합니다. 테이블이 무엇인지는 중요하지 않으며 select 문만 있습니다. – ganders