MVC 4 我的控制器更新数据库的 C# 问题
本文关键字:问题 数据库 更新 我的 控制器 MVC | 更新日期: 2023-09-27 17:56:37
我使用用户信息更新数据库的方法有问题。在 HttpGet 期间,它使用视图模型来确保数据的完整性,而在 HttpPost 中,数据被传回并在那里。(使用断点运行了一些检查,所有内容都保存了它们应该正确的用户数据)
但是,当我运行我的.Save() 方法,此信息不会存储到数据库中。
我已经通过手动更改数据来检查它是否指向正确的数据库,它出现在列表视图中就可以了。我错过了一些东西,只是不知道><</p>
下面是所有相关视图模型中都有表单数据的代码,但它只是不保存!
[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 是我的 house 数据库的一个对象,使用正确的主键正确建模(在数据库查看器中仔细检查)。保存通话:
void DataSources.Save()
{
SaveChanges();
}
没有出现错误,这使情况变得更糟。
using (var context = new UnicornsContext())
{
var unicorn = new Unicorn { Name = "Franky", PrincessId = 1};
context.Unicorns.Add(unicorn); // your missing line
context.SaveChanges();
}
源
你的"_db"对象,我假设是实体框架。这将有一个集合,也许_db。房子?您需要将对象添加到其中。
由于您似乎正在使用实体框架,因此您需要通知实体框架您的模型已更新。在 HttpGet 和 HttpPost 方法之间,模型与数据库上下文解除关联。我认为以下代码可以将其重新附加到上下文,以便您可以保存更改:
context.Entry(myEntity).State = EntityState.Modified;
context.MyEntities.Attach(myModel);
context.SaveChanges();
编辑:忘记添加重新附加方法部件,假设这是您更新的数据库中的现有记录。
我发现这是向数据库添加项目的一种更可靠的方法:
// 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