EF不在SaveChanges上更新特定对象

时间:2011-06-01 19:19:12

标签: c# entity-framework entity-framework-4

我有一个非常奇怪的错误,这似乎只发生在我试图使用实体框架在数据库中更新的特定项目上。

这是我的代码:

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)):(

这对你们任何人都有过吗?知道为什么会发生这种情况,或者是什么导致这种情况?

1 个答案:

答案 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才能轻松编辑项目!