我对 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/