您的位置:首页 > 数据库

简单骗过DataContext,统计Linq to SQL执行查询的次数

2008-09-26 22:22 387 查看
Linq to SQL带有一些缓存,可以复用一些查询,有时候我们为了测试和评价系统需要知道我们进行了几次数据查询,为了这个,我想到一个很损的方法。

DataContext类有一个类型为TextWriter的属性Log,当执行了SQL的时候,会向这个TextWriter里写入所执行的SQL,还有参数等相关信息,经过观察发现,它实际上调用到的只是一个WriteLine(string)方法,所以我弄了个TextWriterWrapper类,继承TextWriter,重写WriteLine(string)方法,在这里面来让查询次数+1;

但是这时候会遇到很郁闷的问题,那就是有很多时候因为要输出参数信息,DataContext会分多行往这里面写东西,又是经过观察发现,除了SQL以外, 别的行都会以“--”开头,这样邪恶的方法就产生了。

public class TextWriterWrapper : TextWriter {

public override void WriteLine(string value) {

if (!value.StartsWith("--")) {

queryCount++;

}

}

public override Encoding Encoding {

get { return Encoding.Default; }

}

public int QueryCount {

get { return queryCount; }

}

private int queryCount;

}

需要统计一个DataContext的SQL查询次数的时候,就靠这个Wrapper就骗了它,还真是损啊。这也很好地体现了面向接口、面向抽象编程的魅力!

其实这个Wrapper可以达到的作用远不止这点,还可以方便的记录查询日志,DataContext给Log的信息实在太简单,我们可以通过这个Wrapper来包装一下,对执行的SQL进行一些记录,可以方便对其进行观察和调试——当然,对于后者,我还是更建议使用专门的调试器来进行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: