2015-10-02 56 views
0

我們的應用程序正在緩存實體框架對象,以便我們的負載平衡網站可以共享緩存項目,而不是服務器A和B,可能會顯示不同的內容(使用in-內存緩存)。緩存代理EF對象到AppFabric,無法在新部署後檢索對象

但是,在完成部署之後,我們無法從緩存中檢索對象。下面引發錯誤:

解串器無法加載型反序列化,因爲類型「System.Data.Entity.DynamicProxies.Banner_FDE1BA817D206A7F0FED7955D1DAA7B97FEEF3213D26B91515A9AC18E73619EC」不能在裝配「EntityFrameworkDynamicProxies-MyAssembly程序,版本= 1.0.0.0,文化中找到=中立,PublicKeyToken = null'。檢查被序列化的類型是否與被反序列化的類型具有相同的合約,並使用相同的程序集。

從我所收集,我們已經緩存在舊的DLL的EF代理的版本到AppFabric的,現在檢索該對象被絆倒EF過,因爲它不知道它在我們的新的DLL的上下文類型。我們已經在這兩個部署之間進行了一些遷移,因此有效地更改了數據庫模型。

我該如何解決這個問題?我想我必須從AppFabric中移除緩存的對象並重新添加 - 但是接下來的版本可能會遇到同樣的問題。

回答

2

將重物體(例如由EF生成的代理類型)發送到緩存服務器永遠不是一個好主意。您應該考慮將小型輕量級DTO對象與緩存服務器進行通信。

根據類型的複雜程度,您甚至可能會重複使用相同的實體類型;但是不是從EF獲得的實例,而是將它們複製到不是代理類型的單獨實例。考慮使用例如EmitMappers在將對象發送到緩存服務器之前執行復制對象的工作。

+0

好的建議 - 謝謝。我們必須將基於EF的對象「克隆」回自己,然後對其進行緩存,似乎工作得很好。乾杯:) –