Je pense à commencer un nouveau projet en utilisant EF 4 et en passant par des articles, j'ai trouvé un article sur EF avec motif de dépôt et l'unité de travail (http://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns-with-entity-framework-4-0.aspx)entité + référentiel unité + ou travail question
En regardant cet article, il utilise ObjectContext comme UnitOfWork et le transmet au Repository. Ma question est que si j'ai 2 ObjectContext ce qui signifie que j'aurai 2 unités de travail, mais je veux que toutes les opérations effectuées sur ces 2 contextes soient une seule unité de travail, ce scénario est-il possible? Je ne veux pas appeler enregistrer sur chaque contexte, je voudrais qu'il soit transactionnel .... sans utiliser transactionscope ...
Par exemple, j'ai un contexte qui gère le journal d'opération et un autre contexte qui gère Ordres. Disons que dans ma couche métier, j'ai une méthode appelée AddOrder(). AddOrder() utilisera le contexte de la commande pour créer une nouvelle commande, mais utilisera également le contexte du journal des opérations pour créer une nouvelle entrée dans le journal des opérations. Puisque ce sont 2 contexte, je vais devoir appeler enregistrer sur les deux contexte à commettre .... peut-être la seule option est d'avoir un seul contexte unique ....
EDIT: Je voulais dire 2 contextes de types différents par exemple: OperationalLogContext et OrderContext.
Merci, cela aide beaucoup. Donc la seule façon est de n'avoir qu'un seul contexte ... et si j'ai 2 contextes, alors je n'aurai pas d'autre choix que de recourir à un mécanisme de transaction, est-ce correct? – pdiddy
non. Vous pouvez en avoir autant que vous voulez. remarquez comment, avec l'injection de dépendance, j'ai dit HttpScopeOrThreadScope? Vous pouvez changer cela pour être singleton (mauvaise idée) ou la valeur par défaut qui est de "nouveau" une nouvelle instance chaque fois qu'un objet est demandé.Donc, c'est à vous de choisir :) Si vous faites la 2ème façon (ce que j'ai fait en utilisant un exemple de test), alors ouais .. vous devrez manuellement chaque nouveau contexte, un par un. par exemple 'var context1 = new SSC (..); var context 2 = nouveau SSC (...); _or = new OR (context1); _olr = new OLR (context2); 'etc .. –
Je devais mettre à jour ma réponse - j'avais un bug sérieux dedans. J'ai remplacé toute référence à 'new EntityConnection (connectionString)' par un simple 'connectionString' car la connexion n'était pas éliminée, si le contexte ne créait pas' EntityConection' (au lieu d'en passer un). Bravo à Ayende Rahien (d'Hibernating Rhino) pour le correctif. –