Dapper achieve simultaneous operation of multiple tables

1: Dapper query helper class, part of the code, the other new update delete can expand their own

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>
        /// Get MySql connection
         ///  </ Summary> 
        ///  <Returns> </ Returns> 
        Private  static the MySqlConnection GetMySqlConnnetion () 
        { 
            return  new new the MySqlConnection (STR); 
        } 

        ///  <Summary> 
        /// Get Parameter Dapper object, New here directly processed without introducing the namespace everywhere
         ///  </ Summary> 
        ///  <Returns> </ Returns> 
        public  static DynamicParameters GetDynamicParameters () 
        { 
            return  new new DynamicParameters (); 
        } 
    } 

    ///  < Summary> 
    /// 
     </summary>///  public class FEG_ConfigHelper 
    { public static IConfiguration _configuration { GET ; SET ;}
         /// <Summary> /// Gets a string connection to the database
         /// </ Summary> /// <Returns> </ Returns> public static String GetDbConnectionStr () 
        { return _configuration.GetSection ( " the 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;
        }
    }
}
View Code

2: Calling code:

 /// <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;
        }
View Code
       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);
        }
View Code

3: Test OK screenshot:

 

 

Guess you like

Origin www.cnblogs.com/Fengge518/p/12393294.html