2013-01-10 143 views
0

爲了更好地說明我的觀點,我簡化了代碼。我需要有一些業務邏輯,我測試一個屬性是否已經從a更改爲b。我面臨的問題是我正在操作的實體附加到我的DBContext。如果我在我引用的一個更新屬性的另還更新:實體框架在內存實體中與保存的實體進行比較

.... 
    var oldEntity = context.Find(x); 
    var updatedEntity = context.Find(x); 

    //here updatedEntity.IntProperty is 6 

    updatedEntity.IntProperty = 7; 

    //here both oldEntity.IntProperty and updatedEntity.IntProperty 
    //are now 7 so my test isn't hit 
    if(oldEntity.IntProperty != updatedEntity.IntProperty && 
     updatedEntity.IntProperty == 7) 
    { 
     .... 

有一些簡便的方法做我想做的,同時使連接到的DbContext這個實體的比較?

+0

您可能想看看ObjectStateManager。它緩存加載的屬性。請參閱http://msdn.microsoft.com/en-us/library/system.data.objects.objectstatemanager.aspx – Andez

+0

我正在使用DBContext而不是ObjectContext。有沒有辦法從DBContext訪問ObjectStateManager? –

+0

@BenTidman將您的DbContext轉換爲具有基礎ObjectContext的IObjectContextAdapter,然後使用其屬性ObjectStateManager。 –

回答

1

我正在使用nHydrate的實體框架。校長將是相同的(這是VB.NET對不起!):

Dim initialEntity = _context.ObjectStateManager.GetObjectStateEntry((TryCast(oldEntity, Objects.DataClasses.IEntityWithKey)).EntityKey) 

Dim oldValue As Integer = initialEntity.OriginalValues.GetValue("IntProperty") 
Dim newValue As Integer = initialEntity.CurrentValues.GetValue("IntProperty") 

希望這會有所幫助。

Andez

+0

是否可以查看特定屬性?你能提供一個如何做到這一點的例子嗎? –

+0

我已更新示例 - 您可以通過名稱本質上調用。 – Andez