2016-11-25 8 views
2

아래 표와 같이 두 개의 테이블이 있으며이 테이블에 같은 이름의 열이 있습니다.관련 테이블에서 페이징을 수행하고 더 이상 쿼리에 매핑하는 방법은 무엇입니까?

[사용자]. [정보]

TABLE_SCHEMA TABLE_NAME COLUMN_NAME 
User Info Id 
User Info UniqueId 
User Info Name 
User Info Email 
User Info CompanyInfoId 
User Info UserTypeId 
User Info LanguageId 
User Info InsertedBy 
User Info InsertedOn 
User Info UpdatedBy 
User Info UpdatedOn 
User Info DeletedBy 
User Info DeletedOn 
User Info IsDeleted 

[사용자]. [유형]

TABLE_SCHEMA TABLE_NAME COLUMN_NAME 
User Type Id 
User Type UniqueId 
User Type Name 
User Type CompanyInfoId 
User Type LanguageId 
User Type InsertedBy 
User Type InsertedOn 
User Type UpdatedBy 
User Type UpdatedOn 
User Type DeletedBy 
User Type DeletedOn 
User Type IsDeleted 

는 내 쿼리에 대한 SQL에서 페이징을 수행합니다. 테이블 하나에 문제가 없습니다. 나는 아래와 같은 것을 수행 할 수 있습니다.

DECLARE @Page  AS INT = 1 
DECLARE @PageSize AS INT = 10 
SELECT TOP (@PageSize) Paged.* FROM (SELECT ROW_NUMBER() OVER (ORDER BY Id) AS Row, * FROM [User].[Info]) AS Paged WHERE Row > (@Page - 1) * @PageSize 

하지만 내 프로젝트에 말끔를 사용하고 그리고 내가 [사용자]를 얻으려면 [정보] 및 [사용자] [유형] 위와 같이 페이징 DB에서.. 이것은 내 STANDART 내부입니다

쿼리 조인

SELECT TOP 10 * FROM [User].[Info] ui INNER JOIN [User].[Type] ut ON ui.UserTypeId = ut.Id 

그리고 페이징이 쿼리를 시도 :

Msg 8156, Level 16, State 1, Line 102 
The column 'Id' was specified multiple times for 'Paged'. 
Msg 207, Level 16, State 1, Line 100 
Invalid column name 'Paged'. 
: 나는이 같은 오류를 얻고 그 결과

DECLARE @Page  AS INT = 1 
DECLARE @PageSize AS INT = 10 
SELECT TOP (@PageSize) Paged FROM ( 
    SELECT ROW_NUMBER() OVER (ORDER BY ui.Id) AS RowNumber, ui.*, ut.* FROM [User].[Info] ui INNER JOIN [User].[Type] ut ON ui.UserTypeId = ut.Id 
) AS Paged WHERE RowNumber > (@Page - 1) * @PageSize 

테이블의 이름이 같은 열이 있기 때문에. 이 문제를 해결하는 방법?

왜 이렇게하고 싶습니까?

dapper 호출 결과에서 EntityFramework와 같은 UserInfo 엔티티에서 도달 UserType을 원하고 동일한 열 이름에서 아무 문제없이 쿼리 결과의 엔티티에 매핑하는 방법을 원합니다.

이 지금은 내 말끔 전화입니다 :)

public IEnumerable<UserInfo> All() 
    { 
     using (IDbConnection db = CreateConnection()) 
     { 
      var sql = "MY SQL QUERY WITH PAGING"; 
      var command = db.Query<UserInfo, UserType, UserInfo>(sql, (userInfo, userType) => 
      { 
       userInfo.UserType = userType; 
       return userInfo; 
      }); 

      return command; 
     } 
    } 

나는 샘플을 많이 보았다하지만 난 해결할 수 있습니다. 도와주세요!

enter image description here

+0

Shouldn를 해결한다 'UserType' 클래스는'CompanyInfoId' 속성을 갖고 있습니까? – Marusyk

+0

클래스'UserType'을 보면'CompanyInfoId' 속성이 없습니다. 그것이 내가 묻는 것이다. 당신은'Name'을 가지고 있고 부모 멤버들 모두는 부모 인'CompanyInfoId'에도 존재하지 않습니다. 그러나 당신의 스키마에 따르면'[User]. [Type]'은'CompanyInfoId' 필드를 가져야합니다. – Marusyk

+0

@MegaTron yeah right! 그런데 왜 그걸 묻는거야? 나는 이해하지 못한다. 나는 지금 UserType에 CompanyInfoId가 필요 없다. – mstfcck

답변

0

당신은 또한 당신의 쿼리를 변경하려고 할 수있는이 하나

DECLARE @Page  AS INT = 1 
DECLARE @PageSize AS INT = 10 

SELECT 
    ui.*, 
    ut.* 
FROM [User].[Info] ui 
    INNER JOIN [User].[Type] ut ON ui.UserTypeId = ut.Id 
ORDER BY ui.Id 
OFFSET (@Page - 1) * @PageSize ROWS 
FETCH NEXT @PageSize ROWS ONLY 

나는 단정에 대한 확인 될 것입니다 모르겠어요하지만 SQL Server 오류를