我正在尝试使用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();
答案 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获取网页的属性并抛出空引用异常,因为它无法为查询找到正确的值。谢谢你顺便提供帮助和耐心。