【问题标题】:Entity Framework Problems: Retrieving cached values instead of recent changes实体框架问题:检索缓存值而不是最近的更改
【发布时间】:2011-10-18 03:17:05
【问题描述】:

我有一个循环遍历表的存储过程,它可能会在该表中插入一些记录。它工作正常。我可以使用 management studio 看到 db 中的变化。

问题是在那之后我将调用另一个将返回一个集合的存储过程。但它总是返回一个缓存值或类似的东西。数据库中的最新更改没有反映在返回的列表中。有什么想法吗?

编辑

我正在导入存储过程以使用 EF 运行。我所做的所有操作都是通过 EF 进行的。 检查以下代码

 TraktorumEntities db = new TraktorumEntities();
var test= db.GetAvailableAttributes(CategoryID).ToList(); // here i get cached values  .How can i force to fetch data from data base 

【问题讨论】:

  • 这是ORM的问题。一旦您使用在 ORM 之外进行更改的存储过程,ORM 就不会知道它们,您必须明确强制它重新加载数据。用MergeOption 试试@Adam 的建议。如果它不起作用,请使用新的上下文来执行第二个存储过程。

标签: asp.net-mvc-3 entity-framework caching


【解决方案1】:

如果您使用相同的键进行查询,EF 将缓存您的结果。

请注意此处的“MergeOption.OverwriteChanges”部分

Walkthrough: Mapping an Entity to Stored Procedures (Entity Data Model Tools) 您需要使用此选项告诉 EF '获取新数据并覆盖本地存储的版本'。

此外,您也没有真正告诉我们您是如何查询这些数据的。这是映射存储过程(映射到实体操作)还是直接在上下文中调用,还是......?

编辑 尝试这些方法

var test= db.GetAvailableAttributes(CategoryID) test.MergeOption = MergeOption.NoTracking; var 结果 = test.ToList()

【讨论】:

    【解决方案2】:

    您是否在 Global Application_Start 中留下了一些 Database.SetInitializer?

    【讨论】:

    • 不。我没有使用类似的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2017-12-10
    • 1970-01-01
    • 2016-08-23
    相关资源
    最近更新 更多