2013-12-19 7 views
0

я получаю System.InvalidOperationException ошибку, которая гласит:Entity Framework InvalidOperationException при обновлении элемента

Дополнительная информация: Член «IsModified» не может быть вызван для собственности «государства», так как объект типа «BatteryItem» не существуют в контексте. Чтобы добавить объект к контекстному вызову Add или Attach method of DbSet.

Не так ли? Это мой метод ниже:

public void UpdateBatteryState(BatteryItem batItem, BatteryState state) 
{ 
    try 
    { 
     batItem.state = state.ToString(); 
     context.BatteryItem.Attach(batItem); 
     var entry = context.Entry(batItem); 
     entry.Property(x => x.state).IsModified = true; 

     Save(); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e.Message); 
    } 
} 
+0

Почему вы даже хотите установить свойство IsModified вручную? EF имеет встроенное отслеживание изменений. – kai

ответ

1

из этой информации, вы должны сделать это таким образом:

public void UpdateBatteryState(BatteryItem batItem, BatteryState state) 
{ 
    try 
    { 

     context.BatteryItem.Add(batItem); 
     batItem.state = state.ToString(); 

     context.SaveChanges() 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e.Message); 
    } 
} 
+0

Обновлено. Нет «би», это только «batteryItem». 'state' не является моделью, это' varchar' в БД, 'BatteryState' является перечислением. – Nikola

+0

context.BatteryItem.Attach (batItem); изменить его на context.BatteryItem.Add (batItem); – kirie

+0

Почему 'Add'? Я не хочу помещать новый объект в базу данных, но обновлять текущий? – Nikola

0

Я установил его, вызывая EntityState.Modified первые затем выводя из строя изменений для свойств после этого, что-то вроде этого:

db.Entry(obj).State = EntityState.Modified; 
db.Entry(obj).Property(x => x.Password).IsModified = false; 
Смежные вопросы