创建多个连接查询 - Dapper

Posted

技术标签:

【中文标题】创建多个连接查询 - Dapper【英文标题】:Create Multiple join query - Dapper 【发布时间】:2019-11-05 18:39:39 【问题描述】:

最近我正在开发一个应用程序,我的导师让我使用 Dapper 作为 ORM。这是第一次工作。我想为 3 个表创建一个连接查询并将值存储在自定义对象中。

这是表格:

public class Customer

public int id  get; set; 
public string fname  get; set; 
public string lname  get; set; 
public List<Orders> Order  get; set; 



public class Orders

public int id  get; set; 
public string code get; set; 
public string name  get; set; 
public  Customer Customer  get; set; 
public  Product Product   get; set; 




public class Product

public int id  get; set; 
public string name  get; set; 
public string price  get; set; 
public  List<Orders> Order  get; set; 

这个 DTO 类:

public class CustomDTO

public string CustomerName  get; set; 
public string OrderName  get; set; 
public string ProductName  get; set; 

我想将从 dapper join 查询执行的结果存储到 CustomDTO 中

【问题讨论】:

问“我从哪里开始?”的问题通常过于宽泛,不适合本网站。人们有自己解决问题的方法,因此不可能有正确的答案。仔细阅读 Where to Start 和 edit 您的帖子。 【参考方案1】:

正如已经指出的那样,您确实需要在帖子中提供更多信息,这样人们就不必做出太多假设。 根据您所说,一种可能的方法是这样的:

using (var connection = new SqlConnection("YOUR_CONNECTION_STRING"))

    connection.Open();

    string cmdTxt = @"SELECT o.name, c.name, p.name
        FROM Orders o
        INNER JOIN Customers c ON o.customerId = c.Id 
        INNER JOIN Products p ON o.productId = p.Id;";

    var results = await connection.QueryAsync<CustomDTO>(cmdTxt);

    if(results.Any()) 
        //do something with the list of `CustomDTO`
    

    connection.Close();

注意:我假设您的 Orders 表具有相关的外键。

【讨论】:

以上是关于创建多个连接查询 - Dapper的主要内容,如果未能解决你的问题,请参考以下文章

将 Dapper MultiMapper 与外部连接查询一起使用

使用dapper时动态拼接查询sql有啥好的方法吗

从 dapper 中的多个查询返回可枚举的结果

具有多个查询的NodeJS mysql连接池

如何正确索引在具有多个连接的查询中使用的表

在大查询中连接多个表