c# - 使用 EF6 保存数据失败。错误 : OriginalValues cannot be used for entities in the Added state

标签 c# entity-framework entity-framework-6

我对 Entity Framework 还很陌生。作为了解更多关于 EF 的入门者,我正在尝试按照 http://genericunitofworkandrepositories.codeplex.com/ 的示例对 EF6 进行通用实现。 .当我开始创建项目时,我能够使用相同的实体保存数据,同时尝试简单明了的实现。但是,现在我在尝试保存数据时遇到了错误。 错误:

  • OriginalValues '(($ReturnValue1)).OriginalValues' threw an exception of type 'System.InvalidOperationException' System.Data.Entity.Infrastructure.DbPropertyValues {System.InvalidOperationException}

消息是:OriginalValues 不能用于已添加状态的实体。

堆栈跟踪:

   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 上有它。谁能帮我解决这个问题?我从昨天就被困在这里了:)。我在堆栈溢出上看到了类似的帖子。但是,他们遇到了像传递空值这样的问题,因为在数据库中没有空值可以被接受。就我而言,这不是问题。请检查我的存储库并建议我可以做什么。感谢任何帮助。这是库链接:https://github.com/tazbir/TryLib

编辑:

错误的地方在这里:

public void SyncObjectState<TEntity>(TEntity entity) where TEntity : class, IObjectState
        {

Entry(entity).State = StateHelper.ConvertState(entity.ObjectState);(error triggers after executing this line)

        }



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 上查看我的存储库。

保重

关于c# - 使用 EF6 保存数据失败。错误 : OriginalValues cannot be used for entities in the Added state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31333916/

相关文章:

C# 检查按钮是否被点击

c# - 是否有用于开发 Entity Framework 4 代码优先的任何好的资源?

c# - MySQL Connector .NET EF6 运算符 LIKE 不工作

c# - Mysql Entity Framework 上的 Guid 属性

c# - WPF C# 如何将文本框输入验证为日期格式

mysql - 文件未找到异常 : The file "MySql.Data.resources" could not be found

c# - 实现两个接口(interface)的参数约束

c# - 使用 ItemsSource 时访问 MenuItem 中的子项,C#\WPF

c# - 亚音速 : Self Join , 表别名

c# - IQueryable<object> 和 List<string> 问题