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();
    }

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

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

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