我有一个非常奇怪的错误,这似乎只发生在我试图使用实体框架在数据库中更新的特定项目上。
这是我的代码:
var shoppingCartItem = GetShoppingCartItemById(shoppingCartItemId);
shoppingCartItem.Quantity = newQuantity;
_context.SaveChanges();
这是在更新之前从数据库获取项目的方法:
public ShoppingCartItem GetShoppingCartItemById(int shoppingCartItemId)
{
if (shoppingCartItemId == 0)
return null;
var query = from sci in _context.ShoppingCartItems
where sci.ShoppingCartItemId == shoppingCartItemId
select sci;
var shoppingCartItem = query.SingleOrDefault();
return shoppingCartItem;
}
此代码适用于某些项目,但不适用于我现在正在测试的特定项目。如果在更改属性Quantity后它检查了对象的状态(使用_context.ObjectStateManager.GetObjectStateEntry(shoppingCartItem)):(
这对你们任何人都有过吗?知道为什么会发生这种情况,或者是什么导致这种情况?
答案 0 :(得分:0)
我在将数据对象传递给视图时遇到了类似的问题,然后再次将其恢复 - 在这种情况下,它会断开与datacontext的链接。在这种情况下不应该发生这种情况,但是将EntityState设置为Modified并重新附加它对我有用,可能值得为你尝试。
var shoppingCartItem = GetShoppingCartItemById(shoppingCartItemId);
shoppingCartItem.Quantity = newQuantity;
_context.Entry(shoppingCartItem).State = System.Data.EntityState.Modified;
_context.SaveChanges();
但请注意,这仅适用于EF4.1 - 我必须更新到4.1才能轻松编辑项目!