为实体框架中的业务对象获取TraceString [英] Get TraceString for your business objects in the Entity Framework
本文介绍了为实体框架中的业务对象获取TraceString的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何获取如下查询的跟踪字符串:
var product = _context.Products.Where(p => p.Category ==Windows)
.SingleOrDefault();
//我不能这样做,因为产品不是ObjectQuery实例
// product.ToTraceString();
解决方案
不同的问题的不同答案。
您不能在此调用 ToTraceString()
:
var product = _context.Products.Where(p => p.Category ==Windows)
.SingleOrDefault();
您可以执行以下操作:
var q = _context.Products.Where(p => p.Category ==Windows)
var ts =((ObjectQuery)q) .ToTraceString();
var product = q.SingleOrDefault();
...但它不是100%准确。 MSSQL EF提供商将使用 TOP 2
单个
,这将会错过。
您可以关闭这个:
var q = _context.Products.Where(p => ; p.Category ==Windows)
var ts =((ObjectQuery)q.Take(2))。ToTraceString();
var product = q.SingleOrDefault();
...这应该让你有正确的SQL,但需要知道实现。
原始问题歪曲了问题。我原来的答案是:
var ts =(product as ObjectQuery).ToTraceString();
How do I get the trace string for a query like this:
var product = _context.Products.Where( p => p.Category == "Windows" )
.SingleOrDefault();
// I can't do this since product is not an ObjectQuery instance
// product.ToTraceString();
解决方案
Different answer for different problem.
You can't call ToTraceString()
on this:
var product = _context.Products.Where( p => p.Category == "Windows" )
.SingleOrDefault();
You can do this:
var q = _context.Products.Where( p => p.Category == "Windows" )
var ts = ((ObjectQuery)q).ToTraceString();
var product = q.SingleOrDefault();
... but it's not 100% accurate. The MSSQL EF provider will use a TOP 2
for Single
which this will miss.
You can come close with this:
var q = _context.Products.Where( p => p.Category == "Windows" )
var ts = ((ObjectQuery)q.Take(2)).ToTraceString();
var product = q.SingleOrDefault();
...which should get you the right SQL but requires knowledge of the implementation.
Original question misrepresented the problem. My original answer was:
var ts = (product as ObjectQuery).ToTraceString();
这篇关于为实体框架中的业务对象获取TraceString的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文