【问题标题】:Entity Framework DbSet not reflecting latest changes to underlying data实体框架 DbSet 未反映对基础数据的最新更改
【发布时间】:2021-05-25 18:23:20
【问题描述】:

对 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;

在代码 cmets 中,当我说“后端数据库表显示数量 = xx”时,我指的是我使用 Sql Server Management Studio 在数据库上直接执行的 SQL 查询。我必须使用存储过程来更新后端数据,因为那里有很多复杂的业务逻辑,使用 EF 并不实用。

提前感谢您的帮助。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework-6


    【解决方案1】:

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

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

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

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

    你还可以做什么来重新加载实体并从数据库中获取它的更新值。

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

    【讨论】:

    • 感谢您的帮助!我在每次请求后处理了上下文,它正在工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    相关资源
    最近更新 更多