2014-12-10 82 views
1

如何強制更新緩存?微風:我如何強制更新緩存中的實體

我有一個實體,實際上是數據庫中的一個視圖。我想強制緩存的實體進行編輯。通常,在保存實體時,緩存也會更新。但在這種情況下,我無法保存實體,因爲它是一個視圖。因此我想強制緩存刷新並從數據庫中讀取更新的值。

我該怎麼做?

回答

1

重寫具有OverwriteChanges的MergeStrategy的實體。就像是。

var entityKey = myEntity.entityAspect.getKey(); 
var query = EntityQuery.fromEntityKey(entityKey) 
    .using(MergeStrategy.OverwriteChanges); 
myEntityManager.executeQuery(query).then(...); 

承諾解決後,實體的最新版本將在緩存中。

+0

謝謝。這應該會生成一個http請求來獲取新的數據集,對吧?我使用Chrome開發者工具來檢查請求是否確實發送了請求,但我看不到任何請求。 – jpo 2014-12-12 17:36:28

+0

是的,它會生成一個HttpRequest,不知道爲什麼你沒有看到它。實體是否得到更新? – 2014-12-12 19:08:42

+0

否。我試圖更新的實體是查找。查找是按照http://www.getbreezenow.com/documentation/lookup-lists所述創建的。因此,它是與其他實體(查找)一起創建的。如果我使用您提供的代碼,可以輕鬆地在控制器中爲我的LookUp方法創建HttpRequest,儘管我只刷新一個實體?或者我不應該這樣聲明查找列表? – jpo 2014-12-12 19:13:25

2

周杰倫的建議的作品,但有一個稍微簡單的方法太... EntityQuery.fromEntities

breeze.EntityQuery.fromEntities(myEntity) 
    .using(myEntityManager).execute().then(...); 

如果要覆蓋可能的未決更改myEntity,添加OverwriteChanges爲周杰倫那樣:

breeze.EntityQuery.fromEntities(myEntity) 
    .using(breeze.MergeStrategy.OverwriteChanges) 
    .using(myEntityManager).execute().then(...); 

如果你想刷新一堆實體(所有相同的類型),你也可以這樣做:

breeze.EntityQuery.fromEntities(employees) // employees is an array of Employee entities 
    .using(breeze.MergeStrategy.OverwriteChanges) 
    .using(myEntityManager).execute().then(...); 
+0

謝謝。這應該會生成一個http請求來獲取新的數據集,對吧?我使用Chrome開發者工具來檢查請求是否確實發送了請求,但我看不到任何請求。 – jpo 2014-12-12 17:35:00

+0

你是說這行不通?我們已經有測試顯示它。你可以在jsFiddle或plunker中重放嗎? – Ward 2014-12-13 02:06:18

+0

是的,這工作正常。 – 2016-09-10 22:44:06

0

答案不適用於我使用breeze-client 1.6.3獲得附加錯誤「二元謂詞的左側不能是文字表達式......」。

這是由於使用枚舉? (我其實想評論,但不能附上圖像) enter image description here

+0

你能告訴我你的代碼嗎? – jpo 2017-03-08 18:00:42

+0

它太複雜,無法在此處發佈,也不是開放源代碼。如果其他一些策略失敗了,我會回過頭來嘗試創建一個最簡單的例子。 – Stefan 2017-03-08 18:23:11