1:Dapper的查询帮助类,部分代码,其它新增更新删除可以自行扩展

using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Text; namespace FEG.ESB.Data.EF
{
using Dapper;
using MySql.Data.MySqlClient;
using System.Threading.Tasks;
using static Dapper.SqlMapper; /// <summary>
///
/// </summary>
public class FEG_DapperHelper
{
private static string str = FEG_ConfigHelper.GetDbConnectionStr(); /// <summary>
/// 查询
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="parames"></param>
/// <returns></returns>
public static IEnumerable<T> Query<T>(string sql, object parames = null) where T : class, new()
{
try
{
using MySqlConnection conn = GetMySqlConnnetion();
return conn.Query<T>(sql, parames);
}
catch (Exception)
{
return null;
}
} /// <summary>
/// 查询 异步操作
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="parames"></param>
/// <returns></returns>
public static async Task<IEnumerable<T>> QueryAsync<T>(string sql, object parames = null) where T : class, new()
{
try
{
using MySqlConnection conn = GetMySqlConnnetion();
return await conn.QueryAsync<T>(sql, parames);
}
catch (Exception)
{
return null;
}
} #region old
///// <summary>
///// 查询两个实体的操作
///// </summary>
///// <param name="sql"></param>
///// <param name="parames"></param>
///// <returns></returns>
//public static Tuple<IEnumerable<T>, IEnumerable<M>> QueryTwoEntity<T, M>(string sql, object parames = null) where T : class where M : class, new()
//{
// try
// {
// using MySqlConnection conn = GetMySqlConnnetion();
// var readData = conn.QueryMultiple(sql, parames);
// var obj = readData.Read<T>() as IEnumerable<T>;
// var obj2 = readData.Read<M>() as IEnumerable<M>;
// return (obj, obj2).ToTuple();
// }
// catch (Exception)
// {
// return null;
// }
//}
#endregion /// <summary>
/// 同时查询多个实体的操作
/// </summary>
/// <param name="sql"></param>
/// <param name="funcObj"></param>
/// <param name="dicParams"></param>
/// <returns></returns>
public static void QueryMultipeEntity(string sql, Dictionary<string, object> dicParams, Action<GridReader> funcObj)
{
using MySqlConnection conn = GetMySqlConnnetion();
if (dicParams != null)
{
DynamicParameters ps = new DynamicParameters();
foreach (string item in dicParams.Keys)
{
ps.Add(item, dicParams[item]);
}
using (var readRsult = conn.QueryMultiple(sql, ps))
{
funcObj.Invoke(readRsult);
}
}
} /// <summary>
/// 获取 MySql连接
/// </summary>
/// <returns></returns>
private static MySqlConnection GetMySqlConnnetion()
{
return new MySqlConnection(str);
} /// <summary>
/// 获取Dapper参数化对象,这里直接New来处理,不到处引入命名空间
/// </summary>
/// <returns></returns>
public static DynamicParameters GetDynamicParameters()
{
return new DynamicParameters();
}
} /// <summary>
///
/// </summary>
public class FEG_ConfigHelper
{
public static IConfiguration _configuration { get; set; }
/// <summary>
/// 获取连接数据库的字符串
/// </summary>
/// <returns></returns>
public static string GetDbConnectionStr()
{
return _configuration.GetSection("ConnectionStrings:ReadonlyConnection").Value;
} /// <summary>
///
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string GetAppSettingValueByKey(string key)
{
return _configuration.GetSection(key).Value;
} /// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static T GetAppSettingEntity<T>(string key) where T : class, new()
{
return _configuration.GetSection(key).Value as T;
}
}
}

2:调用的代码:

 /// <summary>
/// Test dapper,同时查询多个表的操作
/// </summary>
/// <returns></returns>
[HttpPost,Route("TestGridReader")]
public BasisApiResult TestGridReader()
{
BasisApiResult result = new BasisApiResult();
result.data = _personnelService.TestGridReader<FEG.ESB.Data.Model.personnel, FEG.ESB.Data.Model.course>();
return result;
}
       public Tuple<IEnumerable<T>, IEnumerable<M>> TestGridReader<T, M>()
{
IEnumerable<T> plist = null;
IEnumerable<M> clist = null;
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("isdel", "0");
FEG_DapperHelper.QueryMultipeEntity("select * from personnel where isdel=@isdel limit 0,1;select * from course where isdel=@isdel limit 0,1;", dic, x =>
{
plist = x.Read<T>().ToList();
clist = x.Read<M>().ToList();
});
return Tuple.Create(plist, clist);
}

3:测试OK截图:

Dapper同时操作任意多张表的实现的更多相关文章

  1. 多对多第三张表的创建方式 和 forms组件的使用

    目录 一.多对多第三张表的创建 1. 全自动方式 (1)实现代码 (2)优点和不足 2. 纯手撸方式(了解) (1)实现代码 (2)优点和不足 3. 半自动方式(推荐使用) (1)实现代码 (2)优点 ...

  2. ORM多表操作之创建关联表及添加表记录

    创建关联表 关于表关系的几个结论 (1)一旦确立表关系是一对多:建立一对多关系----在多对应的表中创建关联字段. (2)一旦确立表关系是多对多:建立多对多关系----创建第三张关系表----id和两 ...

  3. 实现多个ContentProvider对多张表进行操作

    http://blog.csdn.net/maylian7700/article/details/7365373 SQLite数据库直接操作类: DatabaseHelper.java package ...

  4. 一起学Hadoop——实现两张表之间的连接操作

    ---恢复内容开始--- 之前我们都是学习使用MapReduce处理一张表的数据(一个文件可视为一张表,hive和关系型数据库Mysql.Oracle等都是将数据存储在文件中).但是我们经常会遇到处理 ...

  5. (10)MySQL触发器(同时操作两张表)

    什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合.触发器的这种特性可以协助应用在数据库端确保数据的完整性. 举个例子,比如你现在有两个表[用户表]和[日志 ...

  6. android 玩转ContentProvider之二--实现多个ContentProvider对多张表进行操作

    SQLite数据库直接操作类: DatabaseHelper.java package com.jacp.database; import android.content.Context; impor ...

  7. 第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表

    第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表.课程评论表.用户收藏表.用户消息表.用户学习表 创建名称为ap ...

  8. update操作多张表

    sql 语句多张表UPDATE用法一.当用一个表中的数据来更新另一个表中的数据,T-SQL提供多种写法(下面列出了二种),但建议用第一种写法,虽然传统,但结构清晰.飞.飞Asp技术乐园并且要注意,当用 ...

  9. oracle高级查询(实例基于scott用户四张表)

    oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...

随机推荐

  1. Python自动化测试面试题-编程篇

    目录 Python自动化测试面试题-经验篇 Python自动化测试面试题-用例设计篇 Python自动化测试面试题-Linux篇 Python自动化测试面试题-MySQL篇 Python自动化测试面试 ...

  2. Python开发篇——如何在Flask下编写JWT登录

    首先,HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息)--每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求 ...

  3. JDK1.7HashMap死锁

    JDK1.7HashMap多线程问题 Java技术交流群:737698533 在看之前可以先看看JDK1.7的Hashmap的源码 HashMap在多线程情况下是不安全的,一个是数据的准确性问题,一个 ...

  4. 【阅读笔记】Java核心技术卷一 #3.Chapter5

    5 继承 5.1 类.超类和子类 5.1.1 定义子类 超类(superclass)和子类(subclass), 基类(base class)和派生类(derived class), 父类(paren ...

  5. 【LeetCode】204.计数质数

    问题描述: 统计所有小于非负整数 n 的质数的数量. 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 这是一道简单题,但是却并没有那么直 ...

  6. memcache(11211)未授权访问

    1.安装Memcache服务端 sudo apt-get install memcached 2.启动服务 sudo memcached -d -m 128 -p 11211 -u root 3.ap ...

  7. python代码下载m3u8视频

    代码如下: # -*- coding: utf-8 -*- import requests import re import os import base64 from Crypto.Cipher i ...

  8. input输入框只能输入正数和小数(保留小数点后两位)

    1.限制只能输入正数和小数保留小数点后两位 1 <input type="number" id="txtNum" /> 2 3 <script ...

  9. 小白学习vue第三天,从入门到精通(computed计算属性)

    computed计算属性 <body> <div id="app"> <div>{{myName}}</div> </div& ...

  10. Javac 编译器

    编译过程 Javac 编译过程大致可以分为1个准备过程和3个处理过程: 准备过程:初始化插入式注解处理器. 解析与填充符号表过程,包括: 词法.语法分析,将源代码的字符流转变为标记集合,构造出抽象语法 ...