Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架执行顺序_C#_Entity Framework - Fatal编程技术网

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(表达式谓词)

因此,该条件将应用于数据库,最多只提取两行,而不是整个表