Mir*_*ral 1 .net sql-server-profiler linq-to-sql
我正在使用LINQ2SQL.我刚刚注意到(在SQL Profiler中)LINQ为下面的LINQ生成了多个select语句
var tableData = dataContext.TableName .ToList();
SQL事件探查器显示以下DML语句两次
从TableName中选择columnNames
这是什么原因?
查询所呈现将会做一个select语句.我想知道这里的问题是否隐藏在将问题转移到一个简单的例子中.最有可能在实际代码中,它不会将数据推送到列表中.类似的方法.Where()只构成一个查询 -它并不将数据加载到一个列表,所以下面是2个查询:
var tableData = dataContext.TableName.Where(row => row.Foo == bar);
foreach(var items in tableData) {...}
foreach(var items in tableData) {...}
Run Code Online (Sandbox Code Playgroud)
添加一个.ToList()将强制它在单个TSQL查询中缓冲在内存中; 列表上的后续枚举将在内存中完成(LINQ-to-Objects).
当然,您可以简单地分析LINQ-to-SQL执行的内容:
dataContext.Log = Console.Out; // or any other text-writer
Run Code Online (Sandbox Code Playgroud)
小智 6
SQL Server Profiler默认订阅以下事件;
Audit Login
Audit Logout
Existing Connection
RPC:Completed
SQL:BatchCompleted
SQL:BatchStarting
Run Code Online (Sandbox Code Playgroud)
如果使用这些默认事件启动探查器,您会看到每个批处理语句因为SQL:BatchStarting和SQL:BatchCompleted事件而重复2次.这是一个值得检查的常见误解.
| 归档时间: |
|
| 查看次数: |
858 次 |
| 最近记录: |