简单骗过DataContext,统计Linq to SQL执行查询的次数
2008-09-26 22:22 JimLiu 阅读(565) 评论(0) 收藏 举报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;
}
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进行一些记录,可以方便对其进行观察和调试——当然,对于后者,我还是更建议使用专门的调试器来进行。
浙公网安备 33010602011771号