如何将带有dapper的查询映射到与另一个dto类相关的dto类?

具有以下dto类 struct :

public class ClassA
{
    public string AField1 { get; set; }
    public string AField2 { get; set; }
    public string AField3 { get; set; }
    public ClassB ClassB { get; set; }
}

public class ClassB
{
    public string BField1 { get; set; }
    public string BField2 { get; set; }
    public ClassC ClassC { get; set; }
}

public class ClassC
{
    public string CField1 { get; set; }
    public string CField2 { get; set; }
}

以下是我的查询和一些联接:

SELECT
    [a].[a_field_1] AS 'AField1',
    [a].[a_field_2] AS 'AField2',
    [a].[a_field_3] AS 'AField3',
    [b].[b_field_1] AS 'BField1',
    [b].[b_field_2] AS 'BField2',
    [c].[c_field_1] AS 'CField1',
    [c].[c_field_2] AS 'CField2',
    [d].[d_field_1] AS 'DField1',
FROM
    [dbo].[Table_A] AS [a]
LEFT JOIN
    [dbo].[Table_B] AS [b] ON [a].[table_a_id] = [b].[a_id]
LEFT JOIN
    [dbo].[Table_C] AS [c] ON [b].[table_b_id] = [c].[b_id]
LEFT JOIN
    [dbo].[Table_D] AS [d] ON [c].[table_c_id] = [d].[c_id]
LEFT JOIN
    [dbo].[Table_E] AS [e] ON [d].[table_d_id] = [e].[d_id]

我正在try 遵循我在Dapper文档网站上找到的例子,但到目前为止还没有成功.

var query = await sqlConnection.QueryAsync<ClassA, ClassB, ClassC> (SqlStatementHelper.ReadSqlStatementFile(SqlStatementFileNames.MyQuery), (classA, classB, 
classC) =>
{
    classA.ClassB = classB;
    classB.ClassC = classC;

    return classA;
},
splitOn: "Split on what?");

推荐答案

更改查询以包括分割所需的字段

SELECT
[a].[a_field_1] AS 'AField1',
[a].[a_field_2] AS 'AField2',
[a].[a_field_3] AS 'AField3',
[b].[b_id],
[b].[b_field_1] AS 'BField1',
[b].[b_field_2] AS 'BField2',
[c].]c_id],
[c].[c_field_1] AS 'CField1',
[c].[c_field_2] AS 'CField2',
[d].[d_id],
[d].[d_field_1] AS 'DField1',

因此,您可以在SplitOn参数中设置它们

....
splitOn: "b_id, c_id, d_id");

Csharp相关问答推荐

VS Code - C# - dotnet run找不到文件,但我可以打开并编辑它们吗?

.NET通过版本自动增量设置包版本

当MD5被废弃时,如何在Blazor WASM中使用它?

如何使嵌套for-loop更高效?

Serilog SQL服务器接收器使用UTC作为时间戳

C#类主构造函数中的调试参数

. NET 8 HttpClient post参数将其情况更改为camel'

如何使用C#中的图形API更新用户配置文件图像

并行令牌更新

读取配置文件(mytest. exe. config)

如何模拟耐久任务客户端在统一测试和获取错误在调度NewsListationInstanceAsync模拟设置

MAUI查询参数单一字符串项将不起作用

为什么任务需要在内部使用ManualResetEventSlim?

XUNIT是否使用测试数据的源生成器?

N层解决方案上的依赖注入-删除样板

.NET 6:如何防止系统生成的日志(log)?

在.NET8中如何反序列化为私有字段?

如何设置WinForms按钮焦点,使其看起来像是被Tab键插入其中?

用于分钟和秒验证的MudTextfield的正则表达式掩码

为什么我的UserControl没有加载到我的主窗口中?