更新项目时的实体框架InvalidOperationException

时间:2013-12-19 04:10:14

标签: c# entity-framework

我收到System.InvalidOperationException错误,其中指出:

  

其他信息:无法呼叫会员'IsModified'   属性'state',因为'BatteryItem'类型的实体没有   存在于上下文中。要将实体添加到上下文,请调用Add或   附加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);
     }
}

2 个答案:

答案 0 :(得分: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);
     }
}

答案 1 :(得分:-1)

我通过首先调用EntityState.Modified来修复它,然后禁用对属性的修改,如下所示:

db.Entry(obj).State = EntityState.Modified;
db.Entry(obj).Property(x => x.Password).IsModified = false;