2009-05-27 10 views
0

J'essaie d'obtenir une forme de validation en deux phases à l'aide d'Entity Framework 1.0.Stockage de plusieurs modifications dans Entity Framework

Ce que je voudrais atteindre à un niveau élevé est:

  1. obtenir toutes les données de la base de données et le stocker dans un cache.
  2. modifier les entités individuelles
  3. valider toutes les modifications dans la base de données

j'ai rencontré est le problème à ce jour est que la mise en cache un IQueryable est un peu inutile car il va revenir à la base de données quelle que soit. Donc l'autre option est d'utiliser IEnumberable pour stocker les résultats d'une requête, mais cela m'empêche d'hériter d'une requête et de l'affiner dans une autre (je peux vivre avec ça cependant). L'autre problème est que dès que le EntityContext expire (que j'ai réussi à persister dans la requête http actuelle), il n'y a pas de changement possible.

Est-ce que quelqu'un a déjà essayé de faire quelque chose de similaire dans le passé ou a obtenu des pointeurs?

Un grand merci, Matt

jumpingmattflash.co.uk

Répondre

0

Appel .ToList() sur vos IQueryable résultats de la base de données. Pour ensuite commencer à affiner dans d'autres requêtes, utilisez .AsQueryable(). Cela devrait résoudre votre premier problème. En ce qui concerne votre deuxième problème, je suis également à la recherche d'une solution. Comme je comprends l'implémentation sous-jacente des parties de la relation de Entity Framework tourne autour de l'ObjectStateManager dans l'espace de noms System.Data.Objects de l'assembly System.Data.Entity. Cela à son tour utilise la classe MetadataWorkspace dans l'espace de noms System.Data.Metadata.Edm pour rechercher les mappages de relations. Ceux-ci pourraient être utilisés sans une connexion de base de données sous-jacente, et si oui, fourniraient des outils très groovy pour mettre à jour des graphiques d'objets complexes.

Ce serait bien si le contexte avait un détachement et un attachement d'une manière similaire aux entités individuelles. Il semble que la prochaine version de Entity Framework se concentrera sur ces types spécifiques de problèmes; plus de liberté quand il s'agit d'Entités et de Contextes.

1

Le IQueryable est juste un objet interrogeable pas les données réelles.

Vous devez exécuter la ToList pour extraire les données.

Vous pouvez faire ce que vous essayez de faire si vous pouvez garder le contexte ouvert et utiliser les transactionscope. Dans la plupart des cas, cependant, cela n'est pas possible. Cela verrouillerait également la base de données menant à d'autres probelms.

Une meilleure façon de le faire serait:

  • Lire les données de la base de données
  • Éliminer le contexte
  • client apporte des modifications nécessaires
  • Ouvrir un nouveau contexte
  • Lire les données à nouveau.
  • apporter des modifications en copiant les données à partir des données modifiées à la deuxième série
  • valider les modifications
  • Éliminez du contexte
Questions connexes