关于EF6.0的操作日志问题

baysos 2015-12-08 09:38:39
现在情况是这样:
接手一个已经上线的项目(MVC),后端代码一塌糊涂,EF没有经过任何包装就直接用了,且业务层和Controller都有db侵入,业务代码已经算是有一定规模了~

累死累活前前后后一个月修修补补算是把各种比较明显的业务BUG修补的差不多了,但是很多BUG没办法溯源(因为没有统一日志处理层或者拦截器之类的玩意),查了下网上资料EF6.0是有SQL日志的,但是看了下都是英文文档……看起来有点没有头绪……
望各位大神指点迷津或者给个简单的DEMO之类的东西~小弟谢过了……
...全文
643 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果你只是记录操作类型的sql话,可以重载dbContext(名字可能不一样),在每次saveChanges的时候把sql给记下来(EF6.0以上支持)

namespace XXX //注意和自动生成的dbContext.cs命名空间一致
{
    public partial class YourEntities : DbContext
    {
        /// <summary>
        /// 重载db.saveChanges(),让其在执行的时候记录sql日志 
        /// </summary>
        /// <returns></returns>
        public override int SaveChanges() 
        {
            string sql = "";
            this.Database.Log = (text) => { sql += text; };
            var rs =  base.SaveChanges();
            if(!String.IsNullOrEmpty(sql))
            {
                记录sql的方法(sql);
            }
            return rs;
        }
    }
}
baysos 2015-12-09
  • 打赏
  • 举报
回复
引用 楼主 baysos 的回复:
现在情况是这样: 接手一个已经上线的项目(MVC),后端代码一塌糊涂,EF没有经过任何包装就直接用了,且业务层和Controller都有db侵入,业务代码已经算是有一定规模了~ 累死累活前前后后一个月修修补补算是把各种比较明显的业务BUG修补的差不多了,但是很多BUG没办法溯源(因为没有统一日志处理层或者拦截器之类的玩意),查了下网上资料EF6.0是有SQL日志的,但是看了下都是英文文档……看起来有点没有头绪…… 望各位大神指点迷津或者给个简单的DEMO之类的东西~小弟谢过了……
不是看不懂,是看着费劲。
baysos 2015-12-09
  • 打赏
  • 举报
回复
引用 楼主 baysos 的回复:
现在情况是这样: 接手一个已经上线的项目(MVC),后端代码一塌糊涂,EF没有经过任何包装就直接用了,且业务层和Controller都有db侵入,业务代码已经算是有一定规模了~ 累死累活前前后后一个月修修补补算是把各种比较明显的业务BUG修补的差不多了,但是很多BUG没办法溯源(因为没有统一日志处理层或者拦截器之类的玩意),查了下网上资料EF6.0是有SQL日志的,但是看了下都是英文文档……看起来有点没有头绪…… 望各位大神指点迷津或者给个简单的DEMO之类的东西~小弟谢过了……
不过还是谢谢啦~
  • 打赏
  • 举报
回复
http://www.cnblogs.com/wdfrog/archive/2011/06/13/2078338.html 5.0和6.0底层实现有变更,但用法没变化,所以你可以直接参考5.0的文章
masanaka 2015-12-09
  • 打赏
  • 举报
回复
英文看不懂那没得救了。
你要是日本人还能用Ruby,但是没有中国人发明的编程语言,原版文档都不是汉语的啊。

最简单的Logger

public class MyLogger
{
public void Log(string component, string message)
{
Console.WriteLine("Component: {0} Message: {1} ", component, message);
}
}

hook你的DbContext

var logger = new MyLogger();
context.Database.Log = sql => logger.Log("EFApp", sql);


好吧,字看不懂,视频总看得懂吧?
http://pluralsight.com/training/Player?author=scott-allen&name=aspdotnet-mvc5-fundamentals-m1-introduction&mode=live&clip=0&course=aspdotnet-mvc5-fundamentals

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧