我对实体框架很陌生。作为了解更多关于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;
}
}
}
答案 0 :(得分:0)
我通过从基类中删除重写的方法SaveChanges解决了这个问题。虽然我将不得不调查为什么删除SaveChanges()方法解决了这个问题。
这是我从上下文类中删除的代码块,以使其工作。
public override int SaveChanges()
{
SyncObjectsStatePreCommit();
var changes = base.SaveChanges();
SyncObjectsStatePostCommit();
return changes;
}
谢谢你们......你们可能无法理解这个场景。如果有人想玩这个,你可以在github上查看我的存储库。
小心