使用EF6保存数据失败.处理步骤错误:OriginalValues不能用于处于添加状态的实体
本文关键字:于添加 用于 添加 实体 状态 不能 OriginalValues 失败 数据 保存 EF6 | 更新日期: 2023-09-27 18:02:04
我对实体框架很陌生。作为一个初学者了解更多关于EF,我试图做一个通用的实现EF6下面的例子http://genericunitofworkandrepositories.codeplex.com/。当我开始创建项目时,我能够使用相同的实体保存数据,同时尝试简单的实现。但是,现在我得到了错误,而我试图保存数据。错误:
- OriginalValues’((ReturnValue1美元))。"OriginalValues"抛出了类型为的系统。InvalidOperationException"System.Data.Entity.Infrastructure.DbPropertyValues{系统。InvalidOperationException}
消息是:OriginalValues不能用于处于Added状态的实体。
堆栈跟踪:
at System.Data.Entity.Internal.InternalEntityEntry.ValidateStateToGetValues(String method, EntityState invalidState)
at System.Data.Entity.Internal.InternalEntityEntry.get_OriginalValues()
at System.Data.Entity.Infrastructure.DbEntityEntry`1.get_OriginalValues()
我有它在github上可用。有人能帮我解决这个问题吗?我从昨天就被困在这里了:)。我看到过类似的关于堆栈溢出的帖子。但是,他们遇到了空值传递的问题,其中没有空值可以在db中接受。对我来说,这不是问题所在。请检查我的仓库,并建议我能做什么。感谢任何帮助。这里是库链接:https://github.com/tazbir/TryLib
编辑:错误的地方在这里:
public void SyncObjectState<TEntity>(TEntity entity) where TEntity : class, IObjectState
{
条目(实体)。State = StateHelper.ConvertState(entity.ObjectState);(执行此行后触发错误)
}
public class StateHelper
{
public static EntityState ConvertState(ObjectState state)
{
switch (state)
{
case ObjectState.Added:
return EntityState.Added;
case ObjectState.Modified:
return EntityState.Modified;
case ObjectState.Deleted:
return EntityState.Deleted;
default:
return EntityState.Unchanged;
}
}
}
我通过从基类中删除重写的方法SaveChanges来解决这个问题。虽然我将不得不调查为什么删除SaveChanges()方法解决了这个问题。
这是我从上下文类中删除的代码块,以使其工作。
public override int SaveChanges()
{
SyncObjectsStatePreCommit();
var changes = base.SaveChanges();
SyncObjectsStatePostCommit();
return changes;
}
谢谢大家…你可能无法理解这个场景。如果有人想玩这个,你可以在github上查看我的存储库。
照顾