我有以下返回类型
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
尝试将 HistoricalChangeDto.Id 更改为 HistoricalChangeDto.EntityChangeId
public class HistoricalChangeDto
{
public long EntityChangeId { get; set; }
public DateTime ChangeTime { get; set; }
}