2009-05-21 3 views
1

Question connexe here. Avec la plupart des ORM lorsque vous exécutez une requête sur un contexte existant, les données qui ont été modifiées depuis la première extraction des objets depuis la base de données ne sont pas retournées. Il envoie la requête à la base de données, mais les modifications apportées à la base de données ne sont pas renvoyées car le contexte ne veut pas piétiner vos objets (pour une description de ce comportement dans Linq to SQL, voir here). C'est très bien pour les contextes de courte durée utilisant le modèle d'unité de travail, mais pas si vous utilisez des contextes de longue durée. J'ai essayé Linq to SQL et Entity Framework, les deux frameworks fournissent une méthode d'actualisation qui vous permet de spécifier un argument enum pour écraser l'objet existant dans le contexte, mais cela ne ramassera pas de nouveaux enregistrements (du moins pas sans un ajout requête) et plus important ne supprimera pas les objets pour les enregistrements qui ont été supprimés de la base de données.ORM avec un bon support pour un contexte de fonctionnement prolongé

Je sais que je peux simplement ignorer le contexte et les objets existants, mais je ne veux pas faire cela parce que les objets sont liés à d'autres éléments de l'application. Existe-t-il un ORM capable d'actualiser les objets avec les dernières données de la BD, d'ajouter des objets pour les objets nouvellement créés et de supprimer des objets pour les enregistrements supprimés de la BD, idéalement de manière efficace (ie en utilisant les colonnes MS SQL rowversion).

Répondre

0

Cocher cette ORM: "http://entityorm.uuuq.com"

Vous avez dans le site:

  • exemple de base comment cela fonctionne;
  • Documentation complète et exemple en manuel pdf;
  • Forum;
  • DB pris en charge (illimité car vous pouvez créer vos pilotes).
1

Je ne suis pas sûr, mais il semble que vous ayez besoin de quelque chose de similaire au comportement de DataObjects.Net. Leurs entités sont des objets liés à une session à vie longue qui stockent des données dans un état transactionnel. Lorsque vous ouvrez une nouvelle transaction et lisez la propriété persistante d'objets existants, ils la récupèrent automatiquement dans la base de données (elle concerne également les propriétés EntitySet).

Bien sûr, vous devez exécuter des requêtes complexes pour chaque transaction afin de conserver les résultats de la requête dans l'état actuel, mais je pense que cela peut être facilement automatisé.