使用实体框架更新行

时间:2011-07-18 16:04:59

标签: c# asp.net-mvc entity-framework

我正在尝试在我在另一个表中添加行之后更新表中的字段。 (该值只是为了表明该行已被导入)我以为我在这里使用了正确的代码,但是bool'Imported'字段没有更新。以下是相关代码:

using (DbContext db = new DbContext())
{
    db.Details.Add(details);
    db.SaveChanges();
    newID = details.DetailsID;
    AccessRepository rep = new AccessRepository();
    AccessDetails detailUpdate = rep.GetByID(item.AccessDetailsTableID);
    detailUpdate.Imported = true;
    db.SaveChanges();
}

第一个SaveChanges调用有效,因为我正在尝试添加新行,但不是第二个。它成功地从存储库中检索数据,但只是不更新​​值。

为什么它可能不起作用的任何想法?

由于

2 个答案:

答案 0 :(得分:1)

我认为这是因为您的AccessRepository使用与范围内的数据上下文(db)不同的数据上下文(在您发布的代码中)

您可以尝试在AccessRepository中使用SaveChanges方法,该方法在正确的数据上下文中执行相同操作。

但是,调用两次保存的问题是您丢失了单笔交易的好处。因此,如果这两个更新是相关的,那么你真的应该只调用一次SaveChanges。

我会在AccessRepository中创建一个Add方法和一个Save方法,然后使用类似的东西......

AccessRepository rep = new AccessRepository();
rep.Add(details);
AccessDetails detailUpdate = rep.GetByID(item.AccessDetailsTableID);
detailUpdate.Imported = true;
rep.Save();//this calls SaveChanges on a single data context

希望有所帮助

答案 1 :(得分:0)

你应该在GetById()方法中使用newId吗?

using (DbContext db = new DbContext())
{
    db.Details.Add(details);
    db.SaveChanges();
    newID = details.DetailsID;
    AccessRepository rep = new AccessRepository();
    AccessDetails detailUpdate = rep.GetByID(newID);
    detailUpdate.Imported = true;
    db.SaveChanges();
}