C# 实体框架执行顺序
有谁能告诉我,在调用C# 实体框架执行顺序,c#,entity-framework,C#,Entity Framework,有谁能告诉我,在调用CreateObjectSet的那一行,它是否返回整个表,然后执行Where表达式(在内存中),或者Where表达式是否包含在生成的SQL中 public virtual T GetById(int Id) { if (Id != 0) { PropertyInfo PrimaryKey = GetPrimaryKey(); var ItemParameter =
CreateObjectSet
的那一行,它是否返回整个表,然后执行Where表达式(在内存中),或者Where表达式是否包含在生成的SQL中
public virtual T GetById(int Id)
{
if (Id != 0)
{
PropertyInfo PrimaryKey = GetPrimaryKey();
var ItemParameter = Expression.Parameter(typeof(T), "item");
var WhereExpression = Expression.Lambda<Func<T, bool>>
(Expression.Equal(
Expression.Property(
ItemParameter,
PrimaryKey.Name
),
Expression.Constant(Id)
),
new[] { ItemParameter }
);
T Entity = GetObjectContext().CreateObjectSet<T>().Where(WhereExpression).SingleOrDefault<T>();
GetObjectContext().Refresh(RefreshMode.StoreWins, Entity);
return Entity;
}
else
{
return null;
}
}
公共虚拟T GetById(int-Id)
{
如果(Id!=0)
{
PropertyInfo PrimaryKey=GetPrimaryKey();
var ItemParameter=Expression.Parameter(类型(T),“项目”);
var WhereExpression=Expression.Lambda
(表示)相等(
表达式.属性(
ItemParameter,
PrimaryKey.Name
),
表达式.常量(Id)
),
新[]{ItemParameter}
);
T Entity=GetObjectContext().CreateObjectSet().Where(WhereExpression).SingleOrDefault();
GetObjectContext().Refresh(RefreshMode.StoreWins,实体);
返回实体;
}
其他的
{
返回null;
}
}
CreateObjectSet()
返回类型为ObjectSet
的实例,该类实现IQueryable
。在IQueryable
上调用的方法将转换为SQL
您正在调用IQueryable.Where(表达式谓词)
因此,该条件将应用于数据库,最多只提取两行,而不是整个表