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

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

累死累活前前后后一个月修修补补算是把各种比较明显的业务BUG修补的差不多了,但是很多BUG没办法溯源(因为没有统一日志处理层或者拦截器之类的玩意),查了下网上资料EF6.0是有SQL日志的,但是看了下都是英文文档……看起来有点没有头绪……
望各位大神指点迷津或者给个简单的DEMO之类的东西~小弟谢过了……
...全文
683 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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

资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 在运行 Internet Information Services (IIS) 6.0 和 7.5 时,常常会碰到应用程序池自动停止工作的情况,这会导致网站无法正常访问,出现 HTTP 503 错误。HTTP 503 错误意味着服务器上的服务不可用,通常是因为应用程序池内部出现故障或资源耗尽。 以从 Windows Server 2003 升级到 Windows Server 2008 R2 64 位系统为例,在配置 IIS 7.5、PHP 和 MySQL 环境时,先出现了 PHP 访问速度慢的问题,解决后又出现了应用程序池自动停止的问题,进而导致 HTTP 503 错误。为解决此问题,需查看事件日志,寻找关键的错误提示。 对于 IIS 6.0(同样适用于 IIS 7.0),解决方法如下:一是通过 IIS 管理器查看应用程序池状态,确认如“DefaultAppPool”是否出现问题;二是尝试重启应用程序池,若重启后马上关闭,则需进一步排查;三是查看事件日志,寻找应用程序池进程意外终止的警告或错误事件,比如事件 ID 1009;四是若怀疑是默认程序池问题,可创建新的应用程序池并分配给网站,但若问题依旧,说明问题可能在其他方面;五是查找其他可能的错误事件,像与 DCOM 相关的事件 ID 10016,它可能与权限设置有关;六是找到与错误事件关联的 CLSID(类标识符),在注册表中定位相关服务,这里是“IIS Admin Service”;七是利用组件服务管理工具,给“IIS Admin Service”增加“NETWORK SERVICE”的启动和激活权限;八是如有需要,也对“IIS WAMReg Admin Service”进行相同操作,确保“NETWORK SERVICE”有正确权限

111,111

社区成员

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

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

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