Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.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# LINQ查询未命中数据库_C#_.net_Entity Framework_Linq - Fatal编程技术网

C# LINQ查询未命中数据库

C# LINQ查询未命中数据库,c#,.net,entity-framework,linq,C#,.net,Entity Framework,Linq,我遇到了一个非常简单的密码哈希检索LINQ查询的问题。问题是,如果用户注销,然后尝试重新登录,它只使用查询的缓存值,而不再次查询数据库。问题如下: using (var db = new DataModel.DatabaseContext()) { return (from emp in db.Employees where emp.Username == username select emp.Password).SingleOrDefault(); } 但当我中断时,似乎EF正在一

我遇到了一个非常简单的密码哈希检索LINQ查询的问题。问题是,如果用户注销,然后尝试重新登录,它只使用查询的缓存值,而不再次查询数据库。问题如下:

using (var db = new DataModel.DatabaseContext())
{
    return (from emp in db.Employees where emp.Username == username select emp.Password).SingleOrDefault();
}
但当我中断时,似乎EF正在一个单独的线程上执行一个读卡器!那为什么我认为它不是真正的查询数据库呢?执行时间太短了。它弄乱了我的
async
方法,基本上没有留出足够的时间来显示
MessageBox
(在我第一次调用该方法时工作正常)。也许数据库本身设置了一些临时选项


编辑:我以为我发现了问题所在,但这是不真实的。它在远程服务器上执行查询的速度比ping请求快 这是因为第一次在AppDomain中创建
DbContext
(可能是第一次在应用程序中调用
newyourdbcontext()
)时,需要进行大量初始化和配置,所以第一次需要一些时间,但之后(应用程序运行时)过程加快,所以您感觉不到。

您的应用程序依赖于从数据库获取数据的速度缓慢?“使用查询的缓存值”-我认为EF没有缓存数据,只缓存查询结构和元数据。你真的看到一个旧的值被使用了吗,还是仅仅依赖于时间?不要根据一些异步时间进行猜测,只要让sql分析器在后台运行,你就会清楚地看到它是否命中数据库。我的猜测是这样的,它只是做得更快,因为查询计划已经被ef缓存了。@WiktorZychla我还没有想到这一点。数据本身不会被缓存,但查询计划会被缓存。该漏洞存在于我的应用程序设计中。
DatabaseContext
使用
块包装在
中。我对每个请求使用一个上下文。第一次在AppDomain中创建它时。