问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于MVC+dapper 记录SQL日志的问题

发布网友 发布时间:2022-04-09 20:42

我来回答

4个回答

懂视网 时间:2022-04-10 01:04

using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace KyeDePart.Common.BLL
{
 public class MongoDBHelper<T> where T : class
 {
 protected MongoClient mongoclient;
 protected IMongoDatabase database;
 protected IMongoCollection<T> collection;
 //public static MongoDBHelper<T> MongoDB=new MongoDBHelper<T>();

 /// <summary>
 /// 初始化操作
 /// </summary>
 public MongoDBHelper()
 {
  try
  {
  mongoclient = new MongoDB.Driver.MongoClient(ConfigurationSettings.AppSettings["MongoConnect"]);
  database = mongoclient.GetDatabase(ConfigurationSettings.AppSettings["MongoDatabase"]);
  collection = database.GetCollection<T>(typeof(T).Name);
  }
  catch (Exception ex)
  {
  Common.WriteLogFile(ex.ToString());
  }
 }

 /// <summary>
 /// MongoDB 语法
 /// </summary>
 /// <param name="filter"></param>
 /// <returns></returns>
 public T Query(FilterDefinition<T> filter)
 {
  return collection.Find(filter).FirstOrDefaultAsync().Result;
 }

 /// <summary>
 /// Linq 语法 
 /// </summary>
 /// <param name="func"></param>
 /// <returns></returns>
 public T Query(Expression<Func<T, bool>> func)
 {
  //collection.Find(func).ForEachAsync(x =>Console.WriteLine(""));
  return collection.Find(func).FirstOrDefaultAsync().Result;
 }

 public List<T> QueryList(FilterDefinition<T> filter)
 {
  //var s = collection.Find(filter).ForEachAsync(x => Console.WriteLine(""));
  return collection.Find(filter).ToListAsync().Result;
 }

 public List<T> QueryList(Expression<Func<T, bool>> func)
 {
  return collection.Find(func).ToListAsync().Result;
 }

 /// <summary>
 /// 分页查询
 /// Skip 性能不高
 /// </summary>
 
 /// <returns></returns>
 public List<T> QueryList(int PageIndex, int PageSize, Expression<Func<T, bool>> func, out long RecordCount)
 {
  RecordCount = collection.Find(func).Count();

  //方法一:
  return collection.AsQueryable<T>().Where(func).OrderByDescending(t => "_id").Skip(PageIndex * PageSize).Take(PageSize).ToList();

  

 }

 public bool IsExist(FilterDefinition<T> filter)
 {
  if (collection.Find(filter).FirstAsync().Result != null)
  return true;
  else
  return false;
 }
 public bool IsExist(Expression<Func<T, bool>> func)
 {
  if (collection.Find(func).FirstOrDefaultAsync().Result != null)
  return true;
  else
  return false;

  //long count = collection.CountAsync(func).Result;
  //if (count > 0)
  // return true;
  //else
  // return false;
 }

 public void Add(T model)
 {
  collection.InsertOneAsync(model);
 }

 public void Delete(Expression<Func<T, bool>> func)
 {
  collection.DeleteOneAsync(func);
 }

 public void Delete(FilterDefinition<T> filter)
 {
  collection.DeleteOneAsync(filter);
 }
 public void DeleteMany(Expression<Func<T, bool>> func)
 {
  collection.DeleteMany(func);
 }

 public void Update(FilterDefinition<T> filter, UpdateDefinition<T> updated)
 {
  collection.UpdateOneAsync(filter, updated);
 }
 public void UpdateMany(FilterDefinition<T> filter, UpdateDefinition<T> updated)
 {
  collection.UpdateManyAsync(filter, updated);
 }

 public void Update(Expression<Func<T, bool>> func, UpdateDefinition<T> updated)
 {
  collection.UpdateOneAsync(func, updated);
 }

 public void UpdateMany(Expression<Func<T, bool>> func, UpdateDefinition<T> updated)
 {
  collection.UpdateManyAsync(func, updated);
 }
 }
}

  Model

 public class PerSon
 {
 public ObjectId _id;
 public string Name { get; set; }
 public int Age { get; set; }
 }

  

使用方法

public class PerSonBLL
 {
 protected static MongoDBHelper<Models.PerSon> mongoDB = new MongoDBHelper<Models.PerSon>();
 public static List<Models.PerSon> GetList()
 {
  return mongoDB.QueryList(t => t.Age > 10);
 }

 }

  

MongoDBHelper

标签:mode   art   eric   upd   foreach   base   names   lin   ted   

热心网友 时间:2022-04-09 22:12

可以参考dapper源码,或者反编译一下dapper.dll,在dapper之上再封装一层拓展方法,正好最近我也在做这个,下面代码可以参考一下:

   using Dapper;
   //封装的拓展类
    public static class DapperExtension
    {
        public static int CExecute(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null)
        {
            var beginTime = DateTime.Now;
            return  SqlMapper.Execute(cnn, sql, param, transaction, commandTimeout, commandType).ToLog(sql,param, beginTime);
        }

        public static int CExecute(this IDbConnection cnn, CommandDefinition command)
        {
            var beginTime = DateTime.Now;
            return SqlMapper.Execute(cnn, command).ToLog(command.CommandText,command.Parameters,beginTime);
        }
        ……
        }
        
        //日志记录拓展方法
           private static T ToLog<T>(this T result, string sql, object param, DateTime beginTime, IDbConnection conn =null)
        {
            //日志记录要异步进行,防止日志记录时报错,影响业务流程
            Task.Run(()=> {
                var now = DateTime.Now;
                var log = new LogModel()
                {
                    CreateTime = now,
                    SqlStr = sql,
                    ExcuteResult = result.ToJsonString(),
                    Timespan = (now - beginTime).TotalMilliseconds                    
                };

                if (param != null)
                {
                    foreach (var p in param.GetType().GetProperties())
                    {
                        log.SqlStr=log.SqlStr.Replace("@"+p.Name,p.GetValue(param).ToString());
                    }
                }

                //日志记录到MongoDB中
                MongoDbHelper.SetCollection(log, "Log_"+ now.ToString("yyyyMMdd"), "ExcuteLog");
            });

            return result;
        }

//调用示例:

        public int GetInfo(string sql, object param = null)
        {
             var connStr="....";//数据库连接字符串
            using (var conn = new MySqlConnection(connStr))
            {
                var result = conn.CExecute(sql, param);
                return result;
            }
        }

热心网友 时间:2022-04-09 23:30

应该是获取ID最大的或时间最大的那条数据吧

热心网友 时间:2022-04-10 01:04

我好像也不知道
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
写论文值得推荐的app 写论文app大全汇总 有啥好用又免费的文献查阅网站吗? 高仿苹果手机关机关不了机?是怎么回事?有那个朋友请告知! 高仿苹果6开机就是白屏黑苹果,关机关不了 怎么把电子相册保存到QQ空间相册 整个乡村音乐史上,最动人的25首歌 写给狗的歌 右侧肢体肌力4级是什么意思 肌力分级的评定标准 肌力4级是什么意思 小学英语六年级下册的《活动手册》答案 2019年小学六年级英语书下册人教版翻译 六年级下册英语《新领程》全部答案 六年级下册江苏版英语书76页作文答案 六年级下册新版英语书第四十五页全部答案 高血糖吃什么好,玉米能不能吃 血糖偏高,可以吃玉米么?就是那种有点甜的有点粘的玉米。糖筛是空腹4.9,一小时14.9,两小时8. 糖尿病能吃甜玉米吗 血糖偏高能吃甜玉米吗 *的杨幂的我们更应该支持她,——看完《男人装》,《感孤岛惊魂》宣传照片的感觉 身材,杨幂,刘诗诗,柳岩女星泳装,谁最性感美艳 美女杨幂是谁? 求个有繁体字库的楷体GB2313的文件啊… 一般手写输入法中的字库的字体是楷书吗? 我想用平板电脑与电脑显示器显示同样内容从而利用平板电脑的触摸功能代替鼠标。请问如何进行? 怎么把平板的屏幕用作电脑的屏幕? 请问这是哪种隶书?已知不是微软简隶书、锐字云字库隶书体1.0,急急急! 锐字库怎么样 误删微信好友没有电话,,怎样添加回来- 问一问 锐字云字库综艺体有版权吗 小金牛强制下款后我全额还进去了就没事了吗? 新概念1里101课,有问题不明白? 小金牛贷款还上了还会强制下款吗 新概念第一册101课,中英文,不要下载。 新概念一 101 课 He doesn&#39;t say very much,does he? 为什么要用现在时,怎么不用过去时? 新概念英语可以跳过第一册直接第二册吗? 小金牛强制下款可以去公安局报警了吗 英语发烧友们帮个忙,分析一下谁对谁错...新概念英语第一册第101课,直接引语与间接引语的转换。。。。。 间接引语主句谓语动词的时态形式,为什么在新概念101课用三单形式says,而在133课又是过去式 小金牛APP强制放款,找不到地方退,该怎么办? 谁有新概念英语第一册101课A card from Jimmy的音频文件 dear penny i have just 新概念英语一册101和102课的练习册答案 杭州西湖区晚托班哪里好?我家住在翠苑这边,所以我想了解一下,西湖区这边的晚托班哪里好? 新概念英语中哪里是讲到反义疑问句?? 请问杭州城西有没有比较专业的晚托班,介绍下 新概念英语第一册,改写101课《吉米的明信片》 大家推荐个杭州西湖区这边的晚托班,谢谢 关于新概念英语第一册中lesson47和lesson101的问题。 杭州滨江区晚托班辅导哪好?