在Julie Lerman關於實體框架的出色書籍中,她展示了一個簡單的函數,可以自動更改實體的ModifiedDate列(如果碰巧有一個)。下面將特定的一段代碼轉換爲使用DbContext而不是ObjectContext
Friend Sub FixUpModifiedDates()
Dim entries = From ose In Me.ObjectStateManager.GetObjectStateEntries(EntityState.Added Or EntityState.Modified) Where ose.Entity IsNot Nothing
For Each entry In entries
Dim fieldMetaData = entry.CurrentValues.DataRecordInfo.FieldMetadata
Dim modifiedField As FieldMetadata = fieldMetaData.Where(Function(f) f.FieldType.Name = "ModifiedDate").FirstOrDefault()
If modifiedField.FieldType IsNot Nothing Then
Dim fieldTypeName As String = modifiedField.FieldType.TypeUsage.EdmType.Name
If fieldTypeName = PrimitiveTypeKind.DateTime.ToString() Then
entry.CurrentValues.SetDateTime(modifiedField.Ordinal, DateTime.Now)
End If
End If
Next
End Sub
我在把那用這個EF6.x和的DbContext的傳統模型的過程中,我已經添加它。這段代碼是失敗的,其中一個原因是它需要有一個Imports System.Data.Entity,它沒有在原來的。然而,對ObjectStateManager的引用是純ObjectContext,並且我很難將其轉換爲DbContext友好代碼(不僅僅是因爲似乎越來越少的參考文章或書籍(包括Julie自己的關於此主題的書籍) C#代碼),許多免費的代碼轉換器在使用數據庫和對象上下文特定代碼時遇到了問題。
你們中的任何一個人都知道這可以如何翻譯,並解釋爲什麼這種差異存在?
非常感謝
非常感謝Wiktor。我知道兩者之間的基本區別,它只是語法中的一些小細節,目前可以逃脫我。 –