为实体框架中的业务对象获取TraceString [英] Get TraceString for your business objects in the Entity Framework

查看:96
本文介绍了为实体框架中的业务对象获取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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆