相关疑难解决方法(0)

如何查看实体框架生成的SQL?

如何查看实体框架生成的SQL?

(在我的特殊情况下,我正在使用mysql提供程序 - 如果它很重要)

ado.net entity-framework

587
推荐指数
18
解决办法
29万
查看次数

Entity Framework在获取数据之前或之后执行lambda表达式吗?

我的信念一直是,如果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(),不通常意味着方法AB顺序执行?

c# linq lambda entity-framework

7
推荐指数
1
解决办法
1408
查看次数

实体框架和编译表达式性能

我们使用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.

c# linq entity-framework

3
推荐指数
1
解决办法
745
查看次数

标签 统计

entity-framework ×3

c# ×2

linq ×2

ado.net ×1

lambda ×1