2

我想弄清楚如何在Azure AppFabric緩存中緩存EF查詢結果。目前我使用LoreSoft EntityFramework擴展來處理緩存(http://bit.ly/LWSywm)。它可以與內存緩存完美配合,但與多個VM中的AppFabric不太相同。問題是我的EF對象中有虛擬屬性,並且它們被序列化爲動態代理對象,這當然不能在不同的虛擬機上反序列化,或者甚至在單個虛擬機重新啓動應用程序之後。緩存實體框架結果在Azure AppFabric

我只需要緩存一些查詢,所以我寧願不在整個項目中手動加載每個相關對象。有什麼辦法可以用虛擬屬性序列化EF對象嗎?我不需要虛擬屬性在反序列化後再次奇蹟般地啓動延遲加載。我已經嘗試在序列化結果之前關閉延遲加載DbContext,但這不起作用。我發現獲得可序列化的EF對象的唯一方法是刪除所有虛擬屬性。

通過我已經看過了朱莉·勒曼文章在這裏順便說一句:http://bit.ly/LWToZT

似乎是一個很酷的項目,但我不能完全肯定這將解決我不能夠序列化對象EF問題。如果我剛剛開始的時候不想走上這條路。

任何想法最受讚賞!

回答

4

您可以配置您的dbcontext(或對象上下文)不使用代理對象。顯然,這意味着沒有更改跟蹤,也沒有延遲加載。如果您不急於加載對象的導航屬性,則它們將僅爲null,而不是對代理的引用。值得注意的是,在整個上下文的整個生命週期中,您都可以切換這種情況,所以這不是一個全部或者全部的決定。

如果您正在使用的DbContext,語法是:

context.Configuration.ProxyCreationEnabled = false; 
+0

正是我一直在尋找,謝謝! – ManicBlowfish

1

我們有類似的問題。我們有一個服務返回使用EF從數據庫中讀取的數據。這些數據需要緩存在Appfabric中。

在我們的例子中,服務返回了DTO對象,所以我們將EF對象映射到DTO對象,然後將DTO對象存儲在Appfabric緩存中。