2012-05-15 80 views
0

我正在學習MVC2,我試圖創建一個數據請求管理系統。有點像票務系統。一個簡單的問題,在我的MVC控制器類我有一個後創建Linq到SQL插入 - ID不遞增

[HttpPost] 
    public ActionResult Create(Request request) 
    { 

     if (ModelState.IsValid) 
     { 
      try 
      { 
       // TODO: Add insert logic here 
       var db = new DB(); 
       db.Requests.InsertOnSubmit(request); 

       db.SubmitChanges(); 
       return RedirectToAction("Index"); 
      } 
      catch 
      { 
       return View(request); 
      } 

     } 
     else 
     { 
      return View(request); 
     } 

    } 

好吧,這是非常簡單,以及添加我的看法有一次我創建一個行我在主鍵先拿到0行。然後它不會再增加了,我又添加了一行,並且捕捉使我回到了我所處的相同視圖。似乎主鍵int id不是遞增的。

如何在這裏自動增加id(int類型)?我有點困惑,爲什麼MVC不處理這個,因爲它是主鍵類型int。它只會生成id = 0的第一行,這就是全部。

+0

這聽起來不像MVC問題 - 您使用的是哪種數據庫技術? –

+0

@central - 我編輯你的問題從asp.net-mvc到linq-to-sql的標籤,因爲你的問題和原因是在數據庫級別。順便說一句 - 你需要在表中將ID列標記爲IDENTITY(1,1) - 或者打開SSMS並在其中設置Identity標識。 –

+0

目前正在開發中,我只使用VS2010中的服務器資源管理器來處理SQL Express。並感謝安德拉斯佐爾坦,這是一個LINQ到SQL標記。對標識標籤有意義,現在在VS中找出它。 -edit。在VisualStudio的2k10的Column Properties下很容易,'Identity Specification'(是Identity)更改爲'Yes' – central

回答

1

您的ID列需要設置爲SQL服務器表中的Identity列。

你也應該在using創建DB數據方面:

using(var db = new DB()) 
{ 
    db.Requests.InsertOnSubmit(request); 

    db.SubmitChanges(); 
    return RedirectToAction("Index"); 
} 

否則你灑得到處都是連接;並創建比早期構建的窗口更多的內存泄漏(以及取決於您的流量;))

+0

感謝您的幫助,'using'至關重要。但是我已經調整到了標識列,目前我仍然在創建相同的視圖。將繼續嘗試讓事情發揮作用並回傳。 – central

+0

所以我所做的就是從連接到數據庫的模型中刪除.dbml。對身份進行了更改,並將Linq重新創建爲Sql類,現在它工作正常。 – central

+0

是的,它是dbml中該列自動生成的值屬性:使得它在插入後重新讀取值 –