2016-07-15 46 views
3

在Visual Studio 2012不选择最近更新的价值观,我有项目#1,创建并使用EF 6EF 6除非我重建项目

而另一项目#2是应该在一个SQL数据库更新项只有选择创建/从项目#1

更新的值这两个项目有一个连接字符串到本地数据库

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

选择价值观的问题是:当我在不同的本地主机端口上运行这两个应用程序我可以创建一个条目和s从其他项目中选出它

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

这是怎么回事?

+0

对象跟踪是否被禁用? – ViRuSTriNiTy

+0

@ViRuSTriNiTy,我不知道你如何启用/禁用它?它默认设置为true吗? –

+0

有关更改检测的非常详细的教程可以在这里找到:https://blog.oneunicorn.com/2012/03/10/secrets-of-detectchanges-part-1-what-does-detectchanges-do/。另外,您应该启用日志记录来查看更改付款时是否执行了“UPDATE”SQL语句。如果没有,那么对象跟踪很可能被禁用:https://msdn.microsoft.com/en-us/data/dn469464.aspx – ViRuSTriNiTy

回答

0

的解决方案是避免使用初始化DB背景

这里有一个全局变量是我是我的项目#前做2

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

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

的解决方案是简单地使用使用()与上下文内。

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

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

+0

因为您必须尽快关闭EF环境,所以您不应该保持打开状态。 –

+0

@ L-Four,我使用Visual Studio的默认EF模板,其中用于创建/更新/删除的操作已经存在。上下文是全局的,它使用dispose(),是不是它应该这样做?关闭连接。 –

+0

上下文应该尽快处理,而不是保持开放。 –