2015-04-17 60 views
1

我有以下方法试图更新数据库表(运输成本)中的单个列(不是对象的整个图形!):实体框架6-无法更新表中的单个列

public void UpdateShippingCost(Entities.ShoppingCart shoppingCart) 
    { 
     // Map from domain entity to database object 
     var shoppingCartRecord = Mapper.Map<ShoppingCart>(shoppingCart); 

     shoppingCartRecord.ShippingCost = 99.99M; 

     dbContext.ShoppingCart.Add(shoppingCartRecord); 

     var entry = dbContext.Entry(shoppingCartRecord); 
     entry.Property(e => e.ShippingCost).IsModified = true; 
     dbContext.SaveChanges(); 
    } 

在执行entry.Property(e => e.ShippingCost).IsModified = true;线,我得到以下错误:

Additional information: SetModifiedProperty cannot be called because the object is not in a modified or unchanged state. 

怎么能这样呢?我当然修改了这个对象。

+0

在您请求实体条目之前调用'Add()'。我猜这个对象的确处于'Added'状态。当整个对象将被保存为'Added'时,将其中一个属性标记为'Modified'的意义何在? – haim770

回答

4

致电DBSet<>.Add()将标记该实体为Added。因此,将特定属性标记为Modified是没有意义的。

为了更新现有的实体,请致电DbContext.Attach() EF开始跟踪实体,而不是DbSet<>.Add()

+0

谢谢,就是这样。我粗心大意,打电话。加入,而不是.Attach。 –