C# 更新项时实体框架InvalidOperationException

C# 更新项时实体框架InvalidOperationException,c#,entity-framework,C#,Entity Framework,我得到一个System.InvalidOperationException错误,该错误表明: 其他信息:无法调用成员“IsModified” 属性“state”,因为类型为“BatteryItem”的实体不存在 存在于上下文中。要向上下文添加实体,请调用add或 附加DbSet的方法 我还没有完全做到这一点吗?以下是我的方法: public void UpdateBatteryState(BatteryItem batItem, BatteryState state) { try

我得到一个
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);
     }
}

根据这些信息,您应该这样做:

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);
     }
}

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

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

更新。没有
bi
,只有
batteryItem
<代码>状态不是模型,它是数据库中的
varchar
BatteryState
是enum.context.BatteryItem.Attach(batItem);将其更改为context.BatteryItem.Add(batItem);为什么要添加?我不想将新对象放入数据库,但要更新当前对象?
Add
不会将新对象放入数据库
SaveChanges()
will.@Nikola,很抱歉我错过了这个,您是否尝试删除entry.Property(x=>x.state).IsModified=true;并将其更改为entry.State=EntityState.Modified;为什么要手动设置IsModified属性?EF内置了变更跟踪功能。您能解释一下问题吗?