在使用state = EntityState.Modified的SaveChanges()之后,实体框架不会更新记录

时间:2017-04-20 17:33:45

标签: c# entity-framework

我正在尝试使用Entity Framework进行简单更新。有人能告诉我我的更新声明有什么问题吗?

一切顺利 - 运行时没有错误,但数据库中没有任何变化。

这是我希望有帮助的代码

var cartItem = context.Carts.FirstOrDefault(x => x.id == id);
cartItem.Quantity = quantity;
context.Entry(cartItem).State = EntityState.Modified;
context.Carts.Attach(cartItem);

context.SaveChanges();

2 个答案:

答案 0 :(得分:1)

那是因为您在调用 var cartItem = context.Carts.FirstOrDefault(x => x.id == id); cartItem.Quantity = quantity; context.SaveChanges(); 方法之前附加了实体:

State

此外,如果您尚未停用EF更改跟踪,则无需将Modified更改为Attach,EF将为您完成工作。当您调用State方法时,您将Unchanged属性设置为Attach

您可以这样使用var cartItem= new Cart{id=id}; //Create an instance of your entity setting the key context.Carts.Attach(cartItem);// Attach the entity to the context cartItem.Quantity = quantity; //Set the property //If you haven't disabled change tracking or proxy creation, then you don't need to change the State, EF will do it. context.Entry(cartItem).State = EntityState.Modified; context.SaveChanges();

using System.Runtime.InteropServices;
...
    [DllImport("user32.dll")]
    private static extern bool ShowWindow(IntPtr hWnd, int state);
    private const int SW_SHOWNORMAL = 1;

答案 1 :(得分:0)

我找到了解决问题的方法。问题不是代码错误,而是实体框架本身的错误,当有一个aspx页面与edmx在SaveChanges上生成的对象之一同名而不是为当前项目获取模型的属性时或/ m获取网页的属性并抛出空引用异常,因为它无法为查询找到正确的值。谢谢你顺便提供帮助和耐心。