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内置了变更跟踪功能。您能解释一下问题吗?