0

我使用用户信息更新数据库的方法存在问题。在 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 是我的 house 数据库的一个对象,使用正确的主键正确建模(在数据库查看器中仔细检查。)保存调用:

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

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

4

4 回答 4

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

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

    context.SaveChanges();
}

来源

于 2013-01-29T18:42:38.300 回答
0

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

于 2013-01-29T18:40:13.863 回答
0

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

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

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

于 2013-01-29T19:05:53.740 回答
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
于 2013-01-29T19:55:04.940 回答