我目前有一堆实体模型,有一堆已删除的项目,状态将被删除。有没有办法“删除”他们?我知道我想要取消删除哪些项目,但我不知道如何取消删除项目。理想情况下,我想回到未改变的状态。更改实体状态
Q
更改实体状态
4
A
回答
2
你有没有选择只提交连接上下文? - 在不调用objectContext.SaveChanges()的情况下处置ObjectContext。当然,如果你有一些你不能保存的变化,他们也不会持续。
如果您拨打objectContext.DeleteObject(x)
,则无法取消删除并仍保存更改。
ObjectStateEntry objectStateEntry = objectContext.ObjectStateManager.GetObjectStateEntry(x);
// objectStateEntry.State is not setable
ObjectStateEntry确实有OriginalValues属性,因此,你可以在理论上,精心重建表示原始的变化,减去不想要的集合,退出ObjectContext的,打开一个新的和重建这些变化减去不必要的那里的人。可能不值得麻烦,但目前没有记载的方式来取消删除某些东西的标记。
8
调用后
objectContext.DeleteObject(x)的,
可以模拟对象的反删除X与
objectContext.Detach(X); objectContext.Attach(x)
0
您可以为Context,ObjectSet或EntityObject实现RejectChanges方法。 现在我写VB代码的这些方法: 扩展方法在上下文RejectChanges:
<Extension()>
Sub RejectChanges(ByVal Context As ObjectContext)
Dim Collectin As IEnumerable(Of Object) = From e In Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Modified Or System.Data.EntityState.Deleted) Select e.Entity
Context.Refresh(RefreshMode.StoreWins, Collectin)
Dim AddedCollection As IEnumerable(Of Object) = From e In Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added) Select e.Entity
For Each addedEntity As Object In AddedCollection
Context.Detach(addedEntity)
Next
End Sub
扩展mehod为对象集实现RejectChanges:
<Extension()>
Sub RejectChanges(Of T As MyEntity)(ByVal Lst As ObjectSet(Of T))
Dim collection As IEnumerable(Of T) = From o In Lst.AsEnumerable() Where o.EntityState = EntityState.Modified Or o.EntityState = EntityState.Deleted Select o
Lst.Context.Refresh(RefreshMode.StoreWins, collection)
Dim AddedCollection As IEnumerable(Of T) = (From e In Lst.Context.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added) Select e.Entity).ToList().OfType(Of T)()
For Each entity As T In AddedCollection
Lst.Context.Detach(entity)
Next
End Sub
终于实现RejectChanges为EntityObject:
<Extension()>
Sub RejectChanges(ByVal entity As EntityObject, ByVal Context As ObjectContext)
If entity.EntityState = EntityState.Modified OrElse entity.EntityState = EntityState.Deleted Then
Context.Refresh(RefreshMode.StoreWins, entity)
ElseIf entity.EntityState = EntityState.Added Then
Context.Detach(entity)
End If
End Sub
bye。 [伊曼Shabanzade]
相关问题
- 1. 更改实体框架中的实体状态4.1
- 2. 设置实体状态为已修改
- 3. 在保存添加的实体之后检测对实体状态的更改
- 4. EF4 - Context.Entry不可用于更改实体状态
- 5. Breeze EntityManager不会在saveChanges调用后更改实体状态
- 6. 什么是未更改的状态实体密钥值
- 7. 如何更改多个对象所指的实体的状态?
- 8. 休眠状态下由另一个实体更改连接表
- 9. 更改实体框架中关系的状态
- 10. EF4.x STE:如果子项目更改,实体状态不会更改
- 11. 实例状态更改的通知
- 12. 实体将其状态存储为状态表的FK。一旦状态改变,我可以更新FK吗?
- 13. Java更改状态
- 14. WiFi状态更改
- 15. 动态更改CF7状态
- 16. ObjectStateManager和Detached实体状态
- 17. Android - >状态栏状态已更改
- 18. 在休眠状态下更新父实体而不更新子实体
- 19. 更改状态更改的样式
- 20. 实体框架6 - GetObjectStateEntries预期修改实体有状态“不变”
- 21. 实体框架 - 为什么显式设置实体状态为修改?
- 22. 完成后更改状态
- 23. OTRS ITSM更改状态
- 24. 更改布隆的状态
- 25. 状态更改代码
- 26. REST API状态更改
- 27. 更改按钮状态OnClick
- 28. 更改视图状态
- 29. 更改状态的高度
- 30. 动态更改性状
这太糟糕了。我有一种感觉,没有办法。不幸的是,我们不能仅仅清除背景,所以这不是一个真正的选择。现在我已经实现了一个在删除之前被修改的对象列表。这实际上是一个非常大的麻烦,而且很糟糕的是某些东西不能被标记为不变。 – JohnathanKong 2009-05-06 18:50:31
实体框架设计博客http://blogs.msdn.com/efdesign/说: “...自动跟踪实体架构将与VisualStudio 2010和.NET Framework 4.0一起发行。” “... ... 如果需要,每个自我跟踪实体上都有传播方法来更改此状态(Delete()和SetUnchanged())。” 所以看起来这个功能在EF2中可用 – Tion 2009-05-11 14:33:45