【问题标题】:EF 6 not selecting recently updated values unless I rebuild the project除非我重建项目,否则 EF 6 不会选择最近更新的值
【发布时间】:2016-11-18 09:23:52
【问题描述】:

在 Visual Studio 2012 中,我有使用 EF 6 在 SQL DB 中创建和更新条目的 Project#1。

另一个 Project#2 应该只选择从 Project #1 创建/更新的值

两个项目都有一个到本地数据库的连接字符串

两个项目都引用了包含 .edmx 文件和生成的模型的数据访问层库。

问题是:当我在不同的本地主机端口上运行这两个应用程序时,我能够创建一个条目并从另一个项目中选择它

但是当我想更新一个条目时,我总是看到 OLD 值。只有当我在 Visual Studio 2012 中重建 Project #2 时,我才能看到更新后的值。

编辑操作

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Prefix = "paymentform")] PaymentForm paymentform)
{
    if (ModelState.IsValid)
    {
        Payment payment = db.Payments.Find(paymentform.formId);

        payment.paymenturl = paymentform.paymenturl;

        db.Entry(payment).State = EntityState.Modified;

        db.SaveChanges();

        return RedirectToAction("Index");
    }

    return View(new PaymentConfig());
}

发生了什么?

【问题讨论】:

  • 是否禁用了对象跟踪?
  • @ViRuSTriNiTy,我不知道你如何启用/禁用它?是否默认设置为true?
  • 关于变更检测的非常详细的教程可以在这里找到:blog.oneunicorn.com/2012/03/10/…。此外,您应该启用日志记录以查看在更改付款时是否执行了UPDATE SQL 语句。如果没有,那么对象跟踪很可能被禁用:msdn.microsoft.com/en-us/data/dn469464.aspx
  • @ViRuSTriNiTy,我很肯定这些值已更新,因为我可以在从前端更新它们之后直接通过查询数据库直接看到它们。问题在于,当 Project#2 选择值时,我总是看到旧值。对象跟踪仍然是问题吗?
  • 请注意,model-view-controller 标签是针对有关模式的问题。 ASP.NET-MVC 实现有一个特定的标记。

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


【解决方案1】:

解决方案是避免使用初始化数据库上下文的全局变量

这是我之前在 Project#2 中所做的事情

public class PayController : Controller
{
    Project2Entities db = new Project2Entities();

    public ActionResult Index(int? id)
    {
      //select
    }
   }

解决方案是简单地将 using() 与内部上下文一起使用。

    public ActionResult Index(int? id)
    {
        using (var context = new Project2Entities())
        {
            //select here
        }
    }

我不知道为什么将上下文声明为全局变量不能正常工作。如果有人知道,请澄清。

【讨论】:

  • 因为你必须尽快关闭 EF 上下文,所以你不应该让它保持打开状态。
  • @L-四,我使用 Visual Studio 的默认 EF 模板,其中创建/更新/删除操作已经存在。上下文是全局的,它使用 dispose(),这不是它应该做的吗?关闭连接。
  • 上下文应该尽快处理掉,而不是保持打开状态。
猜你喜欢
  • 2011-03-30
  • 2018-08-05
  • 2015-09-26
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
相关资源
最近更新 更多