Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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# Asp.NETMVC对基本控制器中数据库的调用_C#_Asp.net_Asp.net Mvc_Entity Framework_Asp.net Mvc 4 - Fatal编程技术网

C# Asp.NETMVC对基本控制器中数据库的调用

C# Asp.NETMVC对基本控制器中数据库的调用,c#,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我有一个基本控制器,它调用数据库表并通过ado.net实体框架获取数据。当我调用每个控制器时,基本控制器都被调用。当调用任何一个基本控制器时,它都是来自sql db的数据,并提取我的表信息 我读到实体框架缓存数据。那么,在这种情况下,它会在每次控制器调用时命中db还是命中一次并缓存数据 public class BaseController : Controller { MyEntities db= new MyEntities(); protected ov

我有一个基本控制器,它调用数据库表并通过ado.net实体框架获取数据。当我调用每个控制器时,基本控制器都被调用。当调用任何一个基本控制器时,它都是来自sql db的数据,并提取我的表信息


我读到实体框架缓存数据。那么,在这种情况下,它会在每次控制器调用时命中db还是命中一次并缓存数据

    public class BaseController : Controller
    {

    MyEntities db= new MyEntities(); 
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
      {
             var details = db.mytables.tolist();
      }
    }
我的所有控制器都继承基本控制器

public class MyController : BaseController
{
    //my code
}

我读到实体框架缓存数据

我对此深表怀疑。如果条目被修改,实体框架如何知道而不询问数据库

如果你在只有一次取款的情况下多次取款,银行会非常不高兴,但是他们通过了,因为缓存显示你有足够的钱

这里有一个简单的方法来测试它,无需任何第三方工具

运行应用程序一次,使其通过测试

var details = db.mytables.tolist();
然后在线路上设置断点并关闭数据库服务


现在让执行继续,它应该抛出sql连接失败异常,因为它试图连接到DB

您在哪里读到EF缓存?它可以以SQL缓存但EF不缓存的方式调用SQL。当您为每个请求创建新上下文时,EF跟踪实体但不跟踪asp.net中的实体。此外,您不希望在请求之间重用EF上下文,这是危险的。您需要实现自己的缓存。EF不会缓存数据,它会跟踪实体,但不会在您的上下文实例之间进行跟踪。只需一个Google查询即可找到您提到的声明:。您每次都在新实例上调用.ToList,因此前提开始是false..@CodeCaster如果我正确读取它,它不会缓存数据,只缓存实例它将根据实体表的主键缓存实体实例,即缓存。如果说EF根本不缓存,因为这会让银行感到不安,那就太简单了。