2015-04-17 2 views
1

У меня есть следующий метод, который пытается обновить один столбец (не весь график объекта!) В таблице базы данных (стоимость доставки):Entity Framework 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()' непосредственно перед тем, как вы запрашиваете запись объекта. Я предполагаю, что объект действительно находится в состоянии «Добавлено». Какой смысл отмечать одно из свойств как «Модифицировано», когда весь объект будет сохранен как «Добавлен»? – haim770

ответ

4

Вызов DBSet<>.Add() будет отмечен как объект Added. Поэтому нет смысла отмечать конкретное свойство как Modified.

Чтобы обновить существующий объект, позвоните DbContext.Attach() в начало EF, отслеживая объект, а не DbSet<>.Add().

+0

Спасибо, все. Я стал небрежным и вызвал .Add вместо .Attach. –

Смежные вопросы