Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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/1/database/10.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#_Database_Entity Framework - Fatal编程技术网

C# 强制实体框架查询数据库

C# 强制实体框架查询数据库,c#,database,entity-framework,C#,Database,Entity Framework,我有一个使用相同数据库的服务和一个Web应用程序,以及数据库上下文的公共库。我正在处理我的数据库上下文,但是当我在数据库中手动插入一行时,它不会显示在webapp中,而是在服务中工作 通过记录实体框架,我注意到以下区别: SERVICE - Completed in 8 ms with result: EFMySqlDataReader WEBAPP - Completed in 16 ms with result: CachingReader 所以我怀疑这与webapp使用缓存结果而不是查

我有一个使用相同数据库的服务和一个Web应用程序,以及数据库上下文的公共库。我正在处理我的数据库上下文,但是当我在数据库中手动插入一行时,它不会显示在webapp中,而是在服务中工作

通过记录实体框架,我注意到以下区别:

SERVICE - Completed in 8 ms with result: EFMySqlDataReader
WEBAPP  - Completed in 16 ms with result: CachingReader
所以我怀疑这与webapp使用缓存结果而不是查询数据库有关。有没有办法强制查询数据库

-

为了完整性,它会生成两个相同的查询:

public static async Task<int> CountMailsInQueueAsync()
{
    using (var ctx = new GdprContext())
    {
        ctx.Database.Log = s => Log.Debug(s);

        // SELECT `GroupBy1`.`A1` AS `C1`
        // FROM
        //   (SELECT COUNT(1) AS `A1`
        //    FROM `tbl_email` AS `Extent1`
        //    WHERE (0 = (`Extent1`.`MailStatus`))
        //      OR (1 = (`Extent1`.`MailStatus`))) AS `GroupBy1`;

        return await ctx.Emails
            .Where(e => e.MailStatus == InfMailStatus.Ready || e.MailStatus == InfMailStatus.Processing)
            .CountAsync();
    }
}

// same connection string: 
// "server=localhost;user=dev;database=dev;port=3306;password=none;charset=utf8;Allow User Variables=True;Convert Zero Datetime=True;Allow Zero Datetime=True"
//
// using MySql.Data.Entity v6.9.9

EF不缓存查询结果,即所谓的二级缓存


名称CachingReader表示WEBAPP项目正在使用包。查找它在该项目中是如何设置的,并阅读软件包文档如何忽略/强制缓存重建必须存在一个或类似的问题。

您是否尝试在一行中多次查询同一个提供程序的10倍,并查看CachingReader是否真的比DB慢?EF不会缓存查询结果。看起来您正在使用包。@IvanStoev,我认为使用代理和跟踪,EF至少跟踪6个实体。也就是说,如果使用相同的上下文实例加载两次相同的实体,则第二次加载的结果将不会用于更新第一次加载的结果。当然,此行为不应影响计数结果。@tschmit007跟踪与二级缓存无关。另外,EF6没有CachingReader类,而链接中的第三方包有。@IvanStoev啊,我明白了,你是对的。我不知道这个项目中有这个包。如果你加上它作为答案,我可以把它标记为正确。