Bonjour à tous!
J'ai une petite question existencielle d'architecture lorsque l'on travaille avec Entity Framework.
Je travaille en plusieurs couches et qui sont découplées. L'injection se fait avec Unity.
J'ai une couche de service, une couche business et je voudrais ajouter une couche data pour persister mes données (pour l'instant j'ai des mocks générés).
Si je résume mes projets ca donne ca:
-un projet avec mes définitions d'entités
-un projet avec le code business
-un projet avec les interfaces du code business
-un projet avec le code des services qui référence les interfaces business
-un projet avec les interfaces du code service
J'ajoute un projet DAO, un projet avec les interfaces des DAO et business reference les couches DAO.
Jusque là pas de soucis!
Admettons ma fonction Business GetMyEntities() qui retourne List<MyEntity> elle doit appeller GetMyEntities() du DAO
Toujours pas de problèmes!
Je me retrouve donc avec ca dans mon dao:
Ca fonctionne impec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 List<MyEntity> GetMyEntities() { using(var context = new EfContext()) { return context.MyEntities.ToList(); } }
Les entités sont détachées lorsqu'on sort du contexte. Logique!
Par contre là ou c'est plus corsé, c'est lorsque je veux faire une fonction business un peu plus complexe qui par exemple insère une ligne puis une autre et si il y'a un échec je rollback tout.
Comme chaque insert passe par une fonction du dao et que chaque fonction du dao possède son contexte (donc sa transaction) si je rollback le deuxieme insert ca ne rollback pas le premier! Flute
La méthode serait alors de remonter le contexte dans le business. Oui mais je perdrais mon découplage puisque business referencerais DAO
Est ce que mon raisonnement est juste? Le contexte doit il appartenir au projet des entités, au projet business, au projet dao?
PS: Ah oui je précise un truc important! Je travaille en POCO avec EF Code First CTP5
Partager