我正在尝试检索实体框架为以下LINQ查询生成的原始SQL:
pagedItemResults = from firstItem in dbData.Accession
join secondItem in pagedRowNumberResults
on firstItem.AccessionNumber equals secondItem
select new PaginationResultRow
{
Number = firstItem.AccessionNumber,
ID = firstItem.AccessionId,
Name = firstItem.AcquisitionType.Name,
Description = firstItem.Description
};
虽然它可能非常简单并且类似于之前版本的EF已经存在的其他答案,但我没有运气,也没有在网上发现任何想法?
答案 0 :(得分:3)
您可以通过实施ILoggerProvider
打开日志记录。请参阅文档中的details。
您只需要使用单个上下文实例注册记录器。注册后,它将用于同一AppDomain中上下文的所有其他实例。
using (var db = new BloggingContext())
{
var serviceProvider = db.GetInfrastructure<IServiceProvider>();
var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
loggerFactory.AddProvider(new MyLoggerProvider());
}
您还可以定义要记录的类别。
private static string[] _categories =
{
typeof(Microsoft.Data.Entity.Storage.Internal.RelationalCommandBuilderFactory).FullName,
typeof(Microsoft.Data.Entity.Storage.Internal.SqlServerConnection).FullName
};
答案 1 :(得分:1)
您可以通过以下方式将生成的tsql记录到输出窗口中:
Microsoft.Extensions.Logging.Debug
首先,从Nuget
获取它,然后在您的上下文中,必须定义一个LoggerFactory
。
然后,在您的上下文中的OnConfiguring
中使用它。
public static readonly Microsoft.Extensions.Logging.LoggerFactory _loggerFactory =
new LoggerFactory(new[] {
new Microsoft.Extensions.Logging.Debug.DebugLoggerProvider()
});
optionsBuilder.UseLoggerFactory(_loggerFactory);
答案 2 :(得分:0)
我非常喜欢MiniProfiler,请参阅http://miniprofiler.com/。如果没有这样的话,我会说你必须在实际数据库上使用分析器。