使用EF6无法保存数据。错误:OriginalValues不能用于处于已添加状态的实体

时间:2015-07-10 06:28:42

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

我对实体框架很陌生。作为了解更多关于EF的入门者,我试图按照http://genericunitofworkandrepositories.codeplex.com/的示例制作EF6的通用实现。当我开始创建项目时,我尝试使用相同的实体保存数据,同时尝试简单实现。但是,现在我在尝试保存数据时出错了。 错误:

  
      
  • OriginalValues'(($ ReturnValue1))。OriginalValues'抛出类型异常   '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上有它。任何人都可以帮我解决这个问题吗?我从昨天开始被困在这里:)。我在堆栈溢出时看到类似的帖子。但是,他们遇到的问题就像传递null值那样没有null值可以在db中接受。在我的情况下,这不是问题。请检查我的存储库并建议我能做什么..任何帮助表示赞赏。这是lib链接:https://github.com/tazbir/TryLib

修改:

错误的地方在这里:

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

Entry(entity).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;
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

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

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

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

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

小心