[HttpPost]
public ActionResult Create(FormCollection collection)
{
UpdateModel(collection);
context.SaveChanges();
return RedirectToAction("Index", new {controller = "Home"});
}
操作成功,但没有记录插入数据库。为什么呢?
我不想通过从表单集合中的每个字段获取每个值来手动创建对象。
答案 0 :(得分:1)
UpdateModel(collection);
context.SaveChanges();
您没有对上下文进行任何更改以期望保存某些内容。实体框架(假设这是您正在使用的)与对象一起使用。因此,您需要一个模型并将此模型保存到数据库中。所以你的控制器动作可能如下所示:
[HttpPost]
public ActionResult Create(Product product)
{
_repository.Create(product);
return RedirectToAction("Index", new {controller = "Home"});
}
其中_repository
变量是定义模型操作的界面。使用此处的接口可以将数据访问逻辑与控制器逻辑分开。在这个存储库的实现中,您可以使用任何您喜欢的数据访问技术,例如EF或NHibernate,只是您的控制器不应该知道它。
答案 1 :(得分:0)
你确定上下文是开放的,并且它与你的对象被提取的是相同的吗?是对象仍然连接到上下文? 通常你在每次调用中创建一个新的上下文,你需要将对象附加到上下文,将状态更改为修改状态,而不是使用SaveChanges。 否则,什么也没做。
context.Customers.Attach(myCustomre);
context.ObjectStateManager.ChangeObjectState(myCustomre, System.Data.EntityState.Modified);
context.SaveChanges();
和插入:
context.Customers.AddObject(newCustomer);
context.SaveChanges();