我正在使用 Dapper 在我的应用程序中执行许多查询。目前,我在对一对多关系中的两个表执行查询时遇到错误。我收到此错误:
多地图错误:未找到 splitOn 列“PortalId”
这是我的询问
public async Task<Result<PortalResponse?, Error>> Handle(GetEmailAddressesQuery request, CancellationToken cancellationToken)
{
var parameters = new DynamicParameters();
parameters.Add("@p_tenantid", request.TenantId);
const string sql = """
SELECT em.PortalId, em.Email
FROM dbo.Portal p
JOIN dbo.PortalEmailAddress em ON p.Id = em.PortalId
WHERE p.TenantId = @p_tenantid
""";
using var connection = _dapperContext.CreateConnection();
var response = await connection.QueryAsync<PortalResponse, EmailAddressResponse, PortalResponse>
(new CommandDefinition(sql, parameters, cancellationToken: cancellationToken),
(portal, emailAddress) =>
{
portal.EmailAddresses.Add(emailAddress);
return portal;
}, splitOn: "PortalId");
if (response is null)
{
return PortalErrors.PortalNotFound(request.TenantId);
}
return response.FirstOrDefault();
}
这些是我的回应课程
public sealed class PortalResponse : IResponse
{
public int Id { get; init; }
public string Name { get; init; } = string.Empty;
public List<EmailAddressResponse> EmailAddresses { get; set; } = [];
public List<PhoneNumberResponse> PhoneNumbers { get; set; } = [];
public AddressResponse? Address { get; set; }
public string? WelcomeMessage { get; init; }
public string? Logo { get; init; };
}
public sealed class EmailAddressResponse
{
public int PortalId { get; init; }
public string Email { get; init; } = string.Empty;
}
我以为我的设置是正确的,但可惜我没有。任何帮助表示赞赏。
您需要更改查询以添加 Portal 类中的字段。否则,没有字段可以拆分并创建 QueryAsync 中指定的两个类实例。
const string sql = @"
SELECT p.Id, p.Name, em.PortalId, em.Email
FROM dbo.Portal p
JOIN dbo.PortalEmailAddress em ON p.Id = em.PortalId
WHERE p.TenantId = @p_tenantid";
当然,您还可以添加 Portal 类中映射到数据库列的其他字段。