ASP.NET MVC:POST后没有记录添加到数据库

时间:2011-01-22 22:08:26

标签: asp.net asp.net-mvc asp.net-mvc-2

[HttpPost]
public ActionResult Create(FormCollection collection)
{
    UpdateModel(collection);
    context.SaveChanges();
    return RedirectToAction("Index", new {controller = "Home"});
}

操作成功,但没有记录插入数据库。为什么呢?

我不想通过从表单集合中的每个字段获取每个值来手动创建对象。

2 个答案:

答案 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();