2016-07-15 58 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

上下文應該儘快處理,而不是保持開放。 –