[英]How can I see the SQL text that is sent by LINQ to my database?
我有以下存储库:
public class GenericRepository<T> : IRepository<T> where T : class
{
public GenericRepository(DbContext dbContext)
{
if (dbContext == null)
throw new ArgumentNullException("An instance of DbContext is required to use this repository", "context");
DbContext = dbContext;
DbSet = DbContext.Set<T>();
}
protected DbContext DbContext { get; set; }
protected DbSet<T> DbSet { get; set; }
public virtual IQueryable<T> Find(Expression<Func<T, bool>> predicate)
{
return DbSet.Where<T>(predicate);
}
public virtual IQueryable<T> GetAll()
{
return DbSet;
}
和服务:
private IRepository<Subject> _subjectsRepository;
private IRepository<Content> _contentsRepository;
public ContentService(IRepositoryProvider repositoryProvider)
: base(repositoryProvider)
{
_subjectsRepository = GetStandardRepo<Subject>();
_contentsRepository = GetStandardRepo<Content>();
}
public IList<Content> GetContents(int subjectId, int contentTypeId, int contentStatusId)
{
var contents = _contentsRepository.GetAll()
.Where(a => a.SubjectId == subjectId &&
a.ContentTypeId == contentTypeId &&
(contentStatusId == 99 ||
a.ContentStatusId == contentStatusId))
.ToList();
return contents;
}
我想找到发送到数据库的SQL文本。 我了解我可以通过以下方式做到这一点:
db.GetCommand(query).CommandText
但是有人可以帮助我,告诉我在代码中应该放在哪里。
我想找到发送到数据库的SQL文本,并且我知道我可以使用
您可以使用SQL Server Management Studio 附带的SQL Server Profiler工具来查看服务器已收到的内容以及在服务器上执行的内容。 但是,这可能会影响性能,因此您不应在生产服务器上运行它(除非您知道自己在做什么)。
其他选项使用的是第三方分析器-例如Hibernating Rhinos的商业Entity Framework Profiler ,或者,如果使用ASP.NET/MVC,则使用开放源代码微型分析器 。
您可以使用ToTraceString()来跟踪由Linq to Entities查询生成的SQL,并将其转储到日志中。
这样的扩展方法
public static string ToTraceString<T>(this IQueryable<T> query)
{
var objQuery = query as ObjectQuery<T>;
if (objQuery != null)
{
return string.Format("{0}{2}{1}{2}{2}", DateTime.Now, objQuery.ToTraceString(), Environment.NewLine);
}
return string.Empty;
}
可以称为
var sql = _contentsRepository.GetAll().ToTraceString();
我建议使用LinqPad( http://www.linqpad.net/ )。
使用LinqPad,您可以导入自己的包含DataContext的程序集并使用自己的DAL方法。 看这里 。
运行代码段后,您可以切换为结果视图和SQL视图(以及其他视图)。 这是使用EntityFramework时发现的最好的工具。 我们还受益于能够更直接地调用DAL,而无需遍历顶层应用程序层。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.