实体框架附加更新无效

时间:2011-01-18 19:35:06

标签: entity-framework poco

我正在尝试使用实体框架以下列方式更新POCO对象:

 context.Jobs.Attach(job);
 context.SaveChanges();

这不起作用。不会抛出任何错误,它只是不更新​​数据库中的值。

我试过了:

context.Jobs.AttachTo("Jobs", job);
context.SaveChanges();

没有错,仍然没有错误,没有更新。

5 个答案:

答案 0 :(得分:19)

如何更改ObjectState

context.ObjectStateManager.ChangeObjectState(job, System.Data.EntityState.Modified);

来自MSDN:ObjectStateManager.ChangeObjectState Method

答案 1 :(得分:3)

我猜你正在使用分离的对象 - 检查this answer的第二部分。

答案 2 :(得分:1)

你必须先得到这份工作,然后才能成功更新它,请点击下面的片段

  var job = context.Jobs.Where(p => p.Id == id).FirstOrDefault();
//apply your changes
job.Title = "XXXX";
///....
context.SaveChanges();

答案 3 :(得分:0)

这可能不起作用的另一个原因是相应的Jobs.cs文件已提交但.edmx文件尚未提交。这意味着该属性存在但未映射,因此EF不会考虑修改对象。例如:

...
using (var dao = new DbContext())
{
    dao.Jobs.Attach(job);
    job.SomeProperty = 1234; // SomeProperty exists but is not in the .edmx
    dao.SaveChanges();
}

如果Some.cperty存在于Jobs.cs中但缺少.edmx文件,则此代码将编译并执行,而不提示任何错误,但SomeProperty将不会在数据库中更新。找了一个最好的时间来找到这个。

答案 4 :(得分:0)

我的问题是我在更新对象后附加了,实际上,您必须附加之前才能更新任何属性

context.Table.Attach(object);
object.MyProperty = "new value";
context.Table.SaveChanges();