我的方法存在问题,即使用用户信息更新数据库。 在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();
}
没有出现错误,这使情况更糟。
答案 0 :(得分:4)
using (var context = new UnicornsContext())
{
var unicorn = new Unicorn { Name = "Franky", PrincessId = 1};
context.Unicorns.Add(unicorn); // your missing line
context.SaveChanges();
}
答案 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