Not: kolay bir çekicilik olarak EF 4.1 veya bu işi yapan 4.2 yükseltebilirsiniz:
context.Entry(myEntity).State = EntityState.Unchanged;
ayrıntı için this bakınız.
Public ReadOnly Property DirtyObjects() As IEnumerable(Of ObjectStateEntry)
Get
Return ObjectStateManager.GetObjectStateEntries(
EntityState.Added Or
EntityState.Deleted Or
EntityState.Modified)
End Get
End Property
Public Overloads Sub Refresh()
For Each entry In DirtyObjects
Select Case entry.State
Case EntityState.Modified
Dim original = entry.OriginalValues
For Each prop In entry.GetModifiedProperties()
Dim ordinal = original.GetOrdinal(prop)
entry.CurrentValues.SetValue(ordinal, original(ordinal))
RaisePropertyChanged(entry.Entity, prop)
Next
entry.AcceptChanges()
Case EntityState.Deleted
'I think I would need to call the above again, cuz it might be
'changed values on a Deleted-state entry too.
entry.ChangeState(EntityState.Unchanged)
Case EntityState.Added
entry.ChangeState(EntityState.Detached)
Case Else
'do nothing
Debug.Fail("It's not supposed to stop here.")
End Select
Next
End Sub
Başkanlarını up: - (kolayca C# için transkripsiyonu edilmelidir, üzgünüm VB)
sizin ObjectContext
oluşturulan sınıfına kısmi sınıf oluşturun ve içinde aşağıdaki yöntemleri içerir! Yaklaşan yeni versiyonda bu özellik çok daha kolay oldu.
Evet, bunun çok geç olduğunu anladım .. ama sorun şu ki, nesne bağlamını elden çıkarır ve veritabanını bağlamaya çalışırsanız, performans çok kötüdür. Bu yüzden Nesne bağlamını canlı tutmaya karar verdik. Bir arıza durumunda değişiklikleri geri alabileceğimiz bir yol bulmaya çalışıyorum. – Bhuvan
@Bhuvan - bu "performans kötüdür" iddiası genellikle aşırı sorgulama verileri anlamına gelir. Veri bağlamının çok sıkı bir şekilde kapsandığı çok fazla iş ** yaptım ve mükemmel bir performans. –