C# Asp.NETMVC对基本控制器中数据库的调用
我有一个基本控制器,它调用数据库表并通过ado.net实体框架获取数据。当我调用每个控制器时,基本控制器都被调用。当调用任何一个基本控制器时,它都是来自sql db的数据,并提取我的表信息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
我读到实体框架缓存数据。那么,在这种情况下,它会在每次控制器调用时命中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根本不缓存,因为这会让银行感到不安,那就太简单了。