我的控制器更新数据库的MVC 4 C#问题

时间:2013-01-29 18:35:22

标签: c# asp.net database asp.net-mvc-4

我的方法存在问题,即使用用户信息更新数据库。 在HttpGet期间,它使用视图模型来确保数据的完整性,在HttpPost中,数据被传回并存在。 (运行一些带断点的检查,一切都保存了应该存在的正确用户数据)

但是,当我运行.Save()方法时,此信息不会存储到数据库中。

我已经通过手动更改数据来检查它是否指向正确的数据库,它在列表视图中出现就好了。我遗漏了一些东西,只是无法弄清楚><

以下是所有相关视图模型中的表单数据的代码,但它只是不保存!

    [HttpPost]
    public ActionResult HouseCreate(CreateHouseViewModel viewModel)
    {

        if (ModelState.IsValid)
        {          
            var house = new House();
            house.address = viewModel.address;
            house.postCode = viewModel.postCode;
            house.noOfDisputes = viewModel.noOfDisputes;
            _db.Save();

          return RedirectToAction("House");
        }
        return View(viewModel);
    }

house是我家数据库的一个对象,使用正确的主键正确建模(在数据库查看器中对此进行了双重检查)。 保存电话:

void DataSources.Save()
    {
        SaveChanges();
    }

没有出现错误,这使情况更糟。

4 个答案:

答案 0 :(得分:4)

using (var context = new UnicornsContext())
{
    var unicorn = new Unicorn { Name = "Franky", PrincessId = 1};

    context.Unicorns.Add(unicorn); // your missing line

    context.SaveChanges();
}

Source

答案 1 :(得分:0)

你的“_db”对象,我假设是实体框架。 这将有一个集合,也许_db.Houses?您需要将对象添加到该对象。

答案 2 :(得分:0)

由于您似乎正在使用实体框架,因此您需要通知实体框架您的模型已更新。在HttpGet和HttpPost方法之间,模型与数据库上下文无关。我认为以下代码可以将其重新附加到上下文中,以便您可以保存更改:

context.Entry(myEntity).State = EntityState.Modified;
context.MyEntities.Attach(myModel);
context.SaveChanges();

编辑:忘记添加重新附加方法部分,假设这是您更新的数据库中的现有记录。

答案 3 :(得分:0)

我发现这是向数据库添加项目的更可靠的方法:

// Note: db is your dbContext, model is your view model

var entity = db.Entry(model); // Required to attach the entity model to the database
                              //   you don't need the "var entity = " but its useful
                              //   when you want to access it for logging
db.Entry(model).State = EntityState.Added; // Required to set the entity as added - 
                                           //   modified does not work correctly

db.SaveChanges();             // Finally save