dar*_*r25 3 c# asp.net-mvc entity-framework-6
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;
Run Code Online (Sandbox Code Playgroud)
在代码注释中,当我说“后端数据库表显示数量 = xx”时,我指的是我使用 Sql Server Management Studio 直接在数据库上执行的 SQL 查询。我必须使用存储过程来更新后端数据,因为那里有很多复杂的业务逻辑,并且使用 EF 不切实际。
预先感谢您的任何帮助。
Find仅当在上下文中未找到具有给定键的实体时,才会往返数据库。
如果上下文正在跟踪具有给定主键值的实体(如您的情况),则会立即返回该实体,而无需向数据库发出请求。
如果上下文中不存在该实体,则会向数据库查询具有给定主键值的实体,并将该实体附加到上下文并返回(如果未找到实体,则返回 Null)。
要获取刷新数据,最好在每次请求后处理 DbContext 实例。
您还可以执行以下操作来重新加载实体并从数据库获取其更新值。
Context.Entry<T>(entity).Reload()
Run Code Online (Sandbox Code Playgroud)