Entity Framework 4.1 DbSet Recharger
Je suis aide d'une seule instance de DbContext
scénario à l'ombre toute la copie de la base de données localement dans une application WPF. Je l'ai entendu, c'est une mauvaise pratique, mais ma base de données est petit et j'ai besoin d'une copie de l'échelle locale, tandis que l'application est en cours d'exécution.
Une méthode d'extension pour IQueryable
, Load()
me permet de précharger les éléments d'une DbSet<>
, de sorte que je peux lier les choses à la propriété Locale de DbSet<>
. Les données dans la base de données change rapidement, donc je veux SaveChanges()
et recharger tout, même les objets qui sont déjà suivis. L'appel de la Load()
méthode encore ne pas mettre à jour les éléments qui sont suivies, mais ne sont pas marqué comme modifié, qui sont déjà chargés.
Quelle est la méthode préférée de rechargement de la préchargé éléments dans un DbSet<>
? Sur le dessus de ma tête, je ne peux que penser de l'appel SaveChanges()
, puis passez par toutes les entrées et de définir à la fois d'un suivi, et les valeurs d'origine pour les valeurs en cours dans la base de données, puis Load()
ce que de nouveaux objets qui peuvent avoir été ajoutés. Dans mon scénario, il n'est pas possible de supprimer des objets, mais je pourrais avoir à l'élément de prise en charge de la suppression à long terme. Cela ne semble pas juste, il devrait y avoir un moyen de tout laisser tomber et de le recharger. Il semblerait qu'il est plus facile de laisser tomber mon contexte et juste de commencer à nouveau, mais tous les éléments en WPF sont déjà lié à l' Local´ObservableCollection<>
, et ce juste les dégâts de l'interface.
OriginalL'auteur Gleno | 2011-04-27
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas la façon dont vous êtes censé utiliser
DbContext
, et de ce fait, il est presque impossible de recharger les données. En gardant un contexte unique autour pour une longue période de temps est une utilisation incorrecte. Le lien sera également répondre à pourquoi votre entités de suivi ne sont pas mis à jour.Vous pouvez choisir de recharger une seule entité en appelant
Reload
surDbEntityEntry
:Vous pouvez également revenir à
ObjectContext
et l'utilisationObjectQuery
avecMergeOption.OverrideChanges
, ou de l'utilisationRefresh
pour une collection d'entités avecRefreshMode.StoreWins
.Toutes ces approches souffre de quelques problèmes:
La seule façon correcte pour obtenir de nouvelles données est
Dispose
le contexte, d'en créer un nouveau et de charger tout à partir de zéro - et vous le faites de toute façon.J'aurai pas de changements dans les relations, et pas de suppressions dans la base de données. Je vais commencer une autre question plus tard aujourd'hui, et de tenter d'expliquer exactement pourquoi je ne peux pas avoir une courte durée DbContext. J'espère vraiment que vous pouvez peser avec une contribution très utile.
OriginalL'auteur Ladislav Mrnka
Avec Entity Framework 4.1, la recommandation pour la liaison de données WPF a changé à utiliser .Locale et persistant DbContext.
http://blogs.msdn.com/b/efdesign/archive/2010/09/08/data-binding-with-dbcontext.aspx
C'est, bien sûr, possible d'en disposer quand vous en avez besoin, mais il peut avoir un impact négatif de l'INTERFACE utilisateur si vous n'.
Voici une autre méthode, mais je ne suis pas sûr qu'il prend EF4.1 caractéristiques du compte:
http://msdn.microsoft.com/en-us/library/cc716735.aspx
Je suis totalement d'accord avec vous, à mon humble avis la plupart des gens utilisent cela pour de l'ASP dans lequel le contexte est de courte durée, mais pour les applications de bureau, c'est tout simplement absurde de le recharger à tout ce que vous entrez une nouvelle forme, spécialement si l'info est partagée par les diverses formes de votre application.
OriginalL'auteur skst
DbContexts sont censés vivre peu de temps,
Après enregistrement des modifications de disposer et de le recharger tous depuis le début.
Ont 2 ensembles d'objets.. l'un de db et une autre pour la liaison.
OriginalL'auteur Alexander Taran
Veuillez utiliser l'aide() pour CRUD.Il recharge automatiquement la mise à jour des données.
Meilleures Salutations,
Thet Tin Oo
OriginalL'auteur user3218010