Entity Framework DbSet 未反映对基础数据的最新更改

Entity Framework DbSet not reflecting latest changes to underlying data

System.Data.Entity.DbSet 上的查询未反映最新的可能原因是什么 基础数据的变化?我在 Asp.Net MVC 项目中有以下代码:

    ShoppingEntities dbcontext = new ShoppingEntities();

    var cartID = 200;
    Cart check = dbcontext.Cart.Find(cartID);

    //here check.quantity equals 9, and the back-end database table shows quantity = 9;

    myServiceController.CallSP_UpdateCart(cartID); //back-end stored procedure sets quantity = 10

    check = dbcontext.Cart.Find(cartID);

    // here check.quantity still equals 9, but the back-end database table shows quantity = 10;

在代码注释中,当我说“后端数据库 table 显示数量 = xx”时,我指的是一个 SQL 查询,我直接在数据库上使用 [=21] =] 服务器管理工​​作室。我必须使用存储过程来更新后端数据,因为那里有很多复杂的业务逻辑,使用 EF 不切实际。

在此先感谢您的帮助。

Find 仅当在上下文中找不到具有给定键的实体时才会往返数据库。

如果具有给定主键值的实体正在被上下文跟踪(如您的情况),那么它会立即返回而不向数据库发出请求。

如果实体在上下文中不存在,则正在向数据库查询具有给定主键值的实体,并将该实体附加到上下文并返回(如果不是实体,则返回 Null未找到)。

要获取刷新数据,最好在每次请求后处理 DbContext 实例。

您还可以执行此操作以重新加载实体并从数据库中获取更新后的值。

Context.Entry<T>(entity).Reload()