2012-12-23 64 views
1

我在我的ASP.NET MVC應用程序中使用基於代理的已更改跟蹤的EF5代碼優先。 我的一個域類包含一個非常頻繁更新的數字屬性。出於這個原因,這個屬性是不是持久的使用框架的數據庫:基於代理的更改跟蹤,屬性未在POCO對象中更新

public virtual int CurrentSessions 
{ 
    get 
    { 
     return _currentSessions; 
    } 

    set 
    { 
     Interlocked.Exchange(ref _currentSessions, value); 
    } 
} 

我面臨的問題是財產的價值是不是在會話更新。我的API控制器或者增加上述值或減小它,根據內部邏輯,如下所示:

myObj.CurrentSessions++; 

myObj.CurrentSessions--; 

其中MyObj中是一個代理對象從上下文經由LINQ在每個會話中檢索:

var myObj = objectContext.Instances<myPocoEntity>().FirstOrDefault(cb => cb.SomeProp == someValue); 

當我檢查myObj.CurrentSessions的價值已經上升後/減少,這的確是更新,但在下一次服務器的請求,當MyObj中是RET CurrentSessions始終具有初始值,爲零。

如何確保在POCO實體中更新屬性值而不掃描整個上下文以進行更改?

回答

0

如果我正確理解你的問題,你有單獨的DbContext對象,當一個對象更新對象時,另一個對象在數據庫中的下一個對象請求請求之前沒有看到更改?

如果是這樣,您可能可以通過DbEntityEntry類重新加載有問題的對象。

然後,您可以使用「重新加載()」方法或「GetDatabaseValues()」方法來獲取當前存在於數據庫中的值。

例(一個或多個)

// Reload Usage 
context.Entry(entity).Reload(); 


// GetDatabaseValues Usage 
DbPropertyValues propertyValues = context.Entry(entity).GetDatabaseValues(); 
foreach (DbPropertyValue val in propertyValues) 
{ 
    ... 
} 
+0

我會澄清:我說的是一個單一的** ** ** ** ObjectContext的 - 不是的DbContext - 實體(雖然有很多這樣的不同的實體)我正在更新跨不同的ASP.NET MVC行動(想想多個客戶端發出「開放」和「關閉」請求,相應地增加和減少計數器。我的問題是在一個會話中計數器值的更改不反映在接下來的會話中,訪問相同(但代理)的計數器屬性。 – ury