2011-01-22 56 views
0
[HttpPost] 
public ActionResult Create(FormCollection collection) 
{ 
    UpdateModel(collection); 
    context.SaveChanges(); 
    return RedirectToAction("Index", new {controller = "Home"}); 
} 

操作成功,但沒有重新插入到數據庫中。爲什麼?ASP.NET MVC:POST後沒有添加到數據庫的記錄

我不想通過從表單集合中的每個字段獲取每個值來手動創建一個對象。

+0

您必須插入模式,而不是對其進行更新。您應該通過另一個存儲庫功能插入它。 – 2011-01-22 22:11:15

+0

謝謝Ufuk人。 – user469652 2011-01-22 22:12:45

回答

1
UpdateModel(collection); 
context.SaveChanges(); 

您沒有對上下文進行任何更改以期望保存某些內容。實體框架(假設這是你正在使用的)與對象一起工作。所以你需要一個模型並將這個模型存入數據庫。所以,你的控制器動作看起來是這樣的:

[HttpPost] 
public ActionResult Create(Product product) 
{ 
    _repository.Create(product); 
    return RedirectToAction("Index", new {controller = "Home"}); 
} 

其中_repository變量是一些接口定義您的模型的操作。在這裏使用接口允許您將數據訪問邏輯與控制器邏輯分開。在這個倉庫的實現中,你可以使用任何你喜歡的數據訪問技術,比如EF或NHibernate,只是你的控制器不應該知道它。

0

您確定上下文已打開,並且您的對象已從中提取出來嗎?對象是否仍然連接到上下文? 通常你在每個調用中創建一個新的上下文,你需要附加對象到上下文中改變它的狀態來修改並使用SaveChanges。 否則,什麼都不做。

context.Customers.Attach(myCustomre); 
context.ObjectStateManager.ChangeObjectState(myCustomre, System.Data.EntityState.Modified); 
context.SaveChanges(); 

和插入:

context.Customers.AddObject(newCustomer); 
       context.SaveChanges();