除非重建项目,否则EF 6不会选择最近更新的值

时间:2016-07-15 08:33:12

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

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

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

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

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

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

但是当我想要更新条目时,我总是看到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());
}

发生了什么事?

1 个答案:

答案 0 :(得分:0)

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

以下是我之前在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
        }
    }

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