我正在尝试使用实体框架以下列方式更新POCO对象:
context.Jobs.Attach(job);
context.SaveChanges();
这不起作用。不会抛出任何错误,它只是不更新数据库中的值。
我试过了:
context.Jobs.AttachTo("Jobs", job);
context.SaveChanges();
没有错,仍然没有错误,没有更新。
答案 0 :(得分:19)
如何更改ObjectState
?
context.ObjectStateManager.ChangeObjectState(job, System.Data.EntityState.Modified);
答案 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();