使用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;
            }
        }
    }

使用EF6保存数据失败.处理步骤错误:OriginalValues不能用于处于添加状态的实体

我通过从基类中删除重写的方法SaveChanges来解决这个问题。虽然我将不得不调查为什么删除SaveChanges()方法解决了这个问题。

这是我从上下文类中删除的代码块,以使其工作。

public override int SaveChanges()
        {
            SyncObjectsStatePreCommit();
            var changes = base.SaveChanges();
            SyncObjectsStatePostCommit();
            return changes;
        }

谢谢大家…你可能无法理解这个场景。如果有人想玩这个,你可以在github上查看我的存储库。

照顾