2

J'essaie de comprendre comment mettre en cache les résultats d'une requête EF dans un cache Azure AppFabric. Actuellement, j'utilise les extensions LoreSoft EntityFramework pour gérer la mise en cache (http://bit.ly/LWSywm). Cela fonctionne parfaitement avec un cache en mémoire, mais pas tellement avec AppFabric sur plusieurs machines virtuelles. Le problème est que j'ai des propriétés virtuelles dans mes objets EF, et qu'elles sont sérialisées en tant qu'objets Dynamic Proxy, qui bien sûr ne peuvent pas être désérialisés sur une machine virtuelle différente, ou même après qu'une seule machine virtuelle redémarre l'application.Caching Entity Framework aboutit à Azure AppFabric

Je n'ai que quelques requêtes à mettre en cache, donc je préfère ne pas charger tous les objets associés manuellement dans l'ensemble du projet. Est-il possible de sérialiser un objet EF avec des propriétés virtuelles? Je n'ai pas besoin des propriétés virtuelles pour recommencer magiquement le chargement paresseux après les avoir désérialisées. J'ai essayé de désactiver le chargement paresseux du DbContext avant de sérialiser les résultats, mais cela ne fonctionne pas. La seule façon que j'ai trouvé pour obtenir un objet EF sérialisable est la suppression de toutes les propriétés virtuelles.

Par la façon dont je l'ai regardé l'article Julie Lerman ici: http://bit.ly/LWToZT

On dirait un projet cool, mais je ne suis pas tout à fait sûr que ça va résoudre mon problème de ne pas être en mesure de sérialiser objets EF . Je ne veux pas aller dans cette direction si je vais juste finir là où j'ai commencé.

Toutes les idées les plus appréciées!

Répondre

4

Vous pouvez configurer votre dbcontext (ou le contexte de l'objet) pour ne pas utiliser d'objets proxy. Évidemment, cela signifie aucun suivi de changement et aucun chargement paresseux. Si vous ne souhaitez pas charger les propriétés de navigation d'un objet, elles seront simplement null au lieu de références aux proxys. Il est à noter que vous pouvez activer ou désactiver cette fonction tout au long de la vie du contexte, ce n'est donc pas une décision tout ou rien.

Si vous utilisez DbContext, la syntaxe est:

context.Configuration.ProxyCreationEnabled = false; 
+0

Exactement ce que je cherchais, merci! – ManicBlowfish

1

Nous avons eu un problème similaire. Nous avions un service qui renvoyait des données lues à partir d'une base de données en utilisant EF. Ces données devaient être mises en cache dans Appfabric.

Dans notre cas, les services ont renvoyé des objets DTO, donc nous avons mappé les objets EF aux objets DTO, puis stocké les objets DTO dans le cache Appfabric.

Questions connexes