2013-07-09 70 views
0

我試圖在表中插入值。 我做它,如下所示:使用上下文插入數據庫不起作用

JobTable jobTable = new JobTable(); 
     int result = -1; 

     JobEntities context = new JobEntities(); 
     try 
     { 
      jobTable.JobDate = DateTime.Now; 
      jobTable.JobProcess = processName; 

      context.JobTable.Attach(jobTable); 
      context.JobTable.Add(jobTable); 

      result = context.SaveChanges(); 
      Console.WriteLine("Result => " + result.ToString()); 
     } 
     catch (Exception) 
     { 
      throw; 
     } 

     return jobTable.JobId; 

我每次得到一個新的JobId,但是當我檢查我的數據庫,表保持爲空。 我錯過了什麼?

+0

刪除附加電話,你的添加和附加看起來像他們衝突 –

+0

你確定你正在尋找良好的數據庫?你的.config是什麼樣的? – tschmit007

+0

我在沒有附加的情況下嘗試了它,但它不起作用。這就是爲什麼我認爲我必須插入附加線。我只是試了一遍,沒有附加它也不起作用。 –

回答

2

幾件事情,

首先連接通常用來告訴EF連接到的是已經在數據庫上下文的實體。您可以將其用於添加,但您需要手動通知EF使用狀態管理器添加了此實體。這不是你想要在這裏做的。

添加是向數據庫中插入行的正常方式,這實質上也是將該實體添加到EF上下文中。

你應該在你的上下文中使用一個使用塊,以確保它正確處理。這一點尤爲重要,因爲EF會保留所有實體的副本以跟蹤發生了什麼變化,因此不會處理上下文會導致嚴重的內存泄漏。

下面是我想你的代碼應該是這樣的:

JobTable jobTable = new JobTable(); 

using(var context = new JobEntities()) 
{ 
    jobTable.JobDate = DateTime.Now; 
    jobTable.JobProcess = processName; 

    context.JobTable.Add(jobTable); 

    var result = context.SaveChanges(); 
    Console.WriteLine("Result => " + result.ToString()); 

    return jobTable.JobId; 
} 

如果仍然沒有工作,我建議你看看你的連接字符串,並確認其實際去到DB你期待的,也許它在其他地方製作了自己的數據庫

使用應用程序查詢表並查看您的行是否存在,如果其設置的ID意味着它實際上已獲取到SQL,因爲ID通常由數據庫

+0

我使用了你的代碼示例。但我仍然沒有看到任何數據。所以我改變了我的配置來使用數據庫的真正路徑,現在我得到了我的數據。我猜出於某種原因,它不斷重新創建我的數據庫。 –

相關問題