C# LINQ查询未命中数据库
我遇到了一个非常简单的密码哈希检索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正在一
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中创建它时。