2011-05-06 2 views
0

J'utilise EF v1 et Velocity cache dans mon application .NET 3.5. Mes objets mis en cache sont une représentation du modèle Entity dans la base de données. J'ai donc décidé d'utiliser EF v1 avec des adaptateurs POCO. Il y a donc une couche d'accès à l'entité qui lit l'objet à partir du cache et, s'il n'est pas présent, le lit dans la base de données et le met en cache immédiatement. Maintenant, dans le cas d'utilisation où une mise à jour est requise, le POCO sale doit être mis à jour dans la base de données. Maintenant, je ne peux pas directement utiliser les adaptateurs et les proxies POCO ici car ils ont besoin d'un support qui surveille les changements. Je n'ai jamais hydraté l'objet adaptateur du framework, donc la détection de changement ne se produit pas. L'option la plus simple que je vois est de:Entity Framework v1 et mis à jour POCO mis à jour

  1. Lire l'entité avant la mise à jour. Définissez les valeurs de l'adaptateur à partir de POCO. Laisser la détection de changement suivre son cours. Cela fait une sélection avant chaque mise à jour qui pourrait être coûteuse compte tenu de nombreuses entités associées.
  2. Créez un nouvel objet Entity. Définissez la clé d'entité et les propriétés à partir de POCO. Sauvegarder les modifications. Cela fait des écritures inutiles même lorsque la propriété/l'entité associée n'a pas été modifiée.

J'espère que j'étais clair dans l'énoncé du problème. Veuillez suggérer.

Répondre

0

Actuellement, les résultats 1. et 2. sont les mêmes. Vous devez lire entièrement l'entité (avec les associations) pour vous assurer que les modifications de votre objet détaché sont traduites dans le contexte de l'entité. Les mises en garde de cette approche sont les suivantes: 1. Lire avant mise à jour 2. Stale écrit (puisque toutes les propriétés de l'objet détaché sont mis à jour, nous pourrions finir par mettre à jour une valeur depuis moins enthousiastes nous ne vraiment ce que nous avons changé)

Je ne pense qu'il existe un moyen d'éviter 1. Mais si 2. est critique pour vos besoins d'affaires (ce qui signifie que vous ne pouvez pas vous permettre d'écraser avec des valeurs périmées, gardez une trace des champs que vous modifiez par "IsChangedProperty" et mettez à jour seulement ces champs. douloureux mais malheureusement avec des objets détachés ni EF v4 ni v1 vous donne un peu de répit :(

Questions connexes