2014-10-02 25 views
0

這使我瘋了。我試圖做一個「簡單」的記錄插入,我只能讓它工作,如果我將上下文存儲在變量中或創建本地上下文。我試圖將上下文和模型對象綁在一起,但目前爲止還沒有運氣。MVC簡單插入不更新數據庫

public class TransactionDataAccessLayer 
{   
    public cartableContext transactionContext 
    { 
     get 
     {     
      return new cartableContext(); 
     } 
    } 
} 



class TransactionBusinessLayer 
{  
    Cardata newCar = new Cardata(); 
    public void addCar(Cardata cd) 
    { 
     try 
     { 

      //this works. Storing the context in ctc2 seems to make it work??? 
      TransactionDataAccessLayer tdal = new TransactionDataAccessLayer(); 
      cartableContext ctc2 = tdal.transactionContext; 
      ctc2.cardata.Add(cd); 
      ctc2.SaveChanges(); 

      //this does not work 
      tdal.transactionContext.cardata.Add(cd);     
      tdal.transactionContext.Entry(cd).State = EntityState.Modified;     
      tdal.transactionContext.SaveChanges(); 

     } 
     catch (Exception ex) 
     { 
      Console.WriteLine(ex.InnerException); 
     } 
    } 
} 
+1

如何將這項工作如果返回每次訪問'transactionContext'財產時新環境?所有這些行爲都應該發生在同一個環境中,這就是爲什麼其他方法有效。在MVC中,通常每個請求都有一個上下文。 – 2014-10-02 10:42:13

回答

1

在C#中,屬性基本上只是一些奇特的方法,旨在方便訪問私有字段。因此,在你的getter中返回一個新的Context可以做到這一點;每次訪問時返回一個新的。爲了保持狀態,你需要包含您的上下文中的私人領域,像這樣:

public class TransactionDataAccessLayer 
{ 
    private cartableContext _transactionContext; 
    public cartableContext transactionContext 
    { 
     get 
     { 
      if (_transactionContext == null) 
       _transactionContext = new cartableContext(); 
      return _transactionContext; 
     } 
    } 
} 
+0

@tereško感謝兩位的迴應。請原諒,但現在我真的很困惑。我認爲在每次響應之後上下文都會被刷新,所以你需要一個全新的上下文去處理模型對象。上下文是否應該貫穿所有響應? – kenmtb 2014-10-02 15:40:56

+0

另外transactionBUsinessLayer(TBL)從控制器的addCar方法運行。如果這種情況被移到外面,TBL仍然存在?我仍然錯過了上面TBL中的代碼段之間的區別。我認爲唯一的區別是上下文在被傳入後被存儲在一個變量中? – kenmtb 2014-10-02 15:50:25

相關問題