2017-04-20 83 views
0

我试图用实体框架做一个简单的更新。有人能告诉我我的更新声明有什么问题吗?实体框架不会更新记录后状态= EntityState.Modified SaveChanges()

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

这里是我的代码,我希望它能帮助

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

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

1

那是因为你要附加的实体之前调用SaveChanges方法:

var cartItem = context.Carts.FirstOrDefault(x => x.id == id); 
    cartItem.Quantity = quantity; 

    context.SaveChanges(); 

此外,如果你还没有禁用的EF更改跟踪那么您不需要将State更改为Modified,EF将为您完成这项工作。当您拨打Attach方法时,您正在将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(); 
+0

如果我尝试保存实体未连接时的更改,则代表上下文获得空引用异常,因为这里没有此实体 –

+0

空引用异常?我不明白为什么,无论如何,我会发布另一个解决方案,使用'附加' – octavioccl

+0

嗯是的,我发现它也很奇怪,这就是为什么我问这里 –

相关问题