2016-11-25 5 views
2

私は以下のように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 

しかし、私は私のプロジェクトでDapperのを使用していますが、私は[ユーザー]を取得したい[情報]と[ユーザー] [タイプ]上記のようにページングとデシベルから。

これは、内側には、クエリに参加する私のスタンダールです:

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

そして私は、ページングのために、このクエリを試してみました:

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 

その結果、私はエラーを取得していますよう:

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'. 

テーブルの名前付き列が同じであるためです。この問題を解決するには?

なぜ私はこれをしたいですか?

Dapperコール結果では、EntityFrameworkのようにUserInfoエンティティから到達可能なUserTypeと、同じ列名で問題なくクエリ結果のエンティティにマップする方法を行いたいと思います。

これが今の私のDapperの呼び出しです:)

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

SQL Serverエラーを解決しShouldnクラス 'UserType'は' CompanyInfoId'というプロパティを持っていますか? – Marusyk

+0

'UserType'クラスに' CompanyInfoId'プロパティがないことを見てください。それは私が尋ねるものです。あなたは 'Name'を持ち、すべての親メンバーからですが、親' CompanyInfoId'にも存在しません。しかしあなたのスキーマによれば、 '[User]。[Type]'は 'CompanyInfoId'フィールドを持っていなければなりません。 – Marusyk

+0

@MegaTron yeah you 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 

私はそれがDapperのためにOKになることはよく分からないが、それは

関連する問題