如何查看实体框架生成的SQL?
(在我的特殊情况下,我正在使用mysql提供程序 - 如果它很重要)
我的信念一直是,如果BigDataSet是一个实体,你分配,var someThing = Context.BigDataSet.Single(x => x.Name.Trim().ToUpper.Equals(someName.Trim().ToUpper()));那么EF将做一些魔术将你的lambda表达式转换成一个查询,如
SELECT * FROM big_data_set WHERE name = (someName)
但在考虑之后,除了保留Context.BigDataSet内存中的结果然后执行搜索之外,我看不到它的工作方式.
EF DbSetlambda表达式是否转变为SQL,或者它是否都是在事后应用的?
编辑:如果他们确实变成了SQL,那么如何EF"看到"在获取名称后将要发生的整个事件堆栈?如果我打电话instance.MethodA().MethodB(),不通常意味着方法A和B顺序执行?
我们使用EF进行数据访问,我们有这样的查询:
Expression<TTable, bool> expression = CreateSomeExpression();
var filter = finalExpression.Compile();
var results = db.t_Table.Where(filter).Select(x=>...);
Run Code Online (Sandbox Code Playgroud)
我的问题是,EF会在给定编译表达式的情况下构造正确的查询吗?
例如,如果我的表是:
t_Table
( key int,
value_1 varchar(30),
value_2 varchar(30)
)
Run Code Online (Sandbox Code Playgroud)
要编译的表达式是
p => p.value_1 = 100
Run Code Online (Sandbox Code Playgroud)
这将翻译(在EF中):
select * from t_Table where value_1 = 100
Run Code Online (Sandbox Code Playgroud)
或者它会翻译成
select * from t_Table
Run Code Online (Sandbox Code Playgroud)
然后对结果进行linq查询?
有没有办法检查EF实际上在DB上调用哪些SQL查询?
提前谢谢了,
更新
虽然接受的答案是100%正确的(因此是接受的答案),但我的问题的解决方案是简单地删除编译.删除它导致正确的SQL查询正确where clause.