Dapper 使用 asp.net core 从 sql server 映射自定义列名称

问题描述 投票:0回答:1

我有以下返回类型

 private class ChangeMetadata
        {
            public long SetId { get; set; }
            public string EntityId { get; set; }
            public string EntityType { get; set; }
            public User User { get; set; }
            public EntityChangeType EntityChangeType { get; set; }
            public HistoricalChangeDto Change { get; set; }
        }

public class HistoricalChangeDto
    {
    public long Id { get; set; }
        public DateTime ChangeTime { get; set; }
    }

在此 DTO 中,我有 User 和 HistoricalChangeDto 以及下面的 sql 查询来返回数据

SELECT 
      [a0].[EntityChangeSetId] AS [SetId], 
      [a0].[EntityId], 
      [a0].[EntityTypeFullName] AS [EntityType], 
      [a0].[ChangeType],
      [a0].[Id] AS [EntityChangeId],
      [a0].ChangeTime,  
      [a2].[Id],   
      [a2].[EmailAddress],  
      [a2].[IsInvitedAdvisor],  
      [a2].[JobTitle], 
      [a2].[Name], 
      [a2].[Surname], 
      [a2].[TenantId], 
      [a2].[UserName]  
    FROM 
      [AbpEntityChanges] AS [a] 
      INNER JOIN [AbpEntityChanges] AS [a0] ON [a].[EntityChangeSetId] = [a0].[EntityChangeSetId] 
      INNER JOIN (
        SELECT 
          [a1].[Id], 
          [a1].[UserId] 
        FROM 
          [AbpEntityChangeSets] AS [a1] 
        WHERE 
          [a1].[Reason] <> 'Content Pack Download'
          OR ([a1].[Reason] IS NULL)
      ) AS [t] ON [a].[EntityChangeSetId] = [t].[Id] 
      INNER JOIN [AbpUsers] AS [a2] ON CASE WHEN [t].[UserId] IS NULL THEN 8074 ELSE [t].[UserId] END = [a2].[Id] 
    WHERE 
      [a].[EntityTypeFullName] = 'LegalRegTech.Assessments.Assessment' 
      AND [a].[EntityId] = 10942

[a0].[Id] AS [EntityChange_Id]
应映射到
HistoricalChangeDto.Id
并且
[a0].ChangeTime
应映射到
HistoricalChangeDto.ChangeTime

并且用户Dto有自己的财产

我写了这个简洁的查询

var assessmentChangeMetadataQueryResult  = await connection.QueryAsync<ChangeMetadata, HistoricalChangeDto, User,ChangeMetadata>(assessmentChangeMetadataQuery,
                (changeMetadata,historicalChange,user) =>
                {
                    changeMetadata.User = user;
                    changeMetadata.Change = historicalChange;
                    return changeMetadata;
                },
                splitOn: "EntityChangeId,Id");

ChangeTime
映射到
HistoricalChangeDto.ChangeTime
,但是
[a0].[Id] AS [EntityChangeId]
未映射到
Id

c# asp.net asp.net-core dapper
1个回答
0
投票

尝试将 HistoricalChangeDto.Id 更改为 HistoricalChangeDto.EntityChangeId

  public class HistoricalChangeDto
    {
        public long EntityChangeId { get; set; }
        public DateTime ChangeTime { get; set; }
    }
© www.soinside.com 2019 - 2024. All rights reserved.