Entity Framework 4 / POCO - Par où commencer? [fermé]


183

Je programme depuis un certain temps et j'ai déjà utilisé LINQ-To-SQL et LINQ-To-Entities (bien que lors de l'utilisation d'entités, cela ait été une relation Entité / Table 1-1 - c'est-à-dire pas très différent de L2SQL)

J'ai beaucoup lu sur l'inversion de contrôle, l'unité de travail, le POCO et les modèles de référentiel et j'aimerais utiliser cette méthodologie dans mes nouvelles applications.

Là où j'ai du mal, c'est de trouver un guide du débutant clair et concis pour EF4 qui ne suppose pas la connaissance d'EF1.

Les questions spécifiques auxquelles j'ai besoin de réponses sont:

Code d'abord / modèle d'abord? Avantages / inconvénients en ce qui concerne EF4 (c'est-à-dire que se passe-t-il si je code d'abord, que je change le code à une date ultérieure et que j'ai besoin de régénérer mon modèle de base de données - Les données sont-elles conservées et transformées ou supprimées?)

En supposant que je passe d'abord au code (j'aimerais voir comment EF4 le convertit en schéma de base de données), comment puis-je commencer? Assez souvent, j'ai vu des articles avec des diagrammes d'entités indiquant "Donc c'est mon modèle d'entité, maintenant je vais ..." - Malheureusement, je ne sais pas s'ils ont créé le modèle dans le concepteur, l'ont enregistré dans générer du code puis arrêté toute nouvelle génération de code automatique -ou- Ils ont codé (POCO)? classes et les importés en quelque sorte dans la vue deisgner?

Je suppose que ce dont j'ai vraiment besoin, c'est de comprendre d'où vient la "magie" et comment l'ajouter moi-même si je ne génère pas simplement un modèle EF directement à partir d'une base de données.

Je suis conscient que la question est un peu vague mais je ne sais pas ce que je ne sais pas - Donc toute entrée / correction / clarification appréciée.

Inutile de dire que je ne m'attends pas à ce que quelqu'un s'assoie ici et m'apprenne l'EF - j'aimerais juste quelques bons tutoriels / forums / blogs / etc. pour les débutants de l'entité complète


3
soyez vraiment VRAIMENT prudent avec la durée de vie de vos connexions: bit.ly/fi83NV C'est quelque chose dont vous devez vraiment être conscient lorsque vous extrayez des contextes dans des référentiels. Cela pourrait sembler fonctionner, mais en réalité, il enregistre lentement de plus en plus de connexions ouvertes
BritishDeveloper

@BRitishDeveloper - Très bon conseil. Cela nous a en fait surpris, mais dans le sens inverse - Nous utilisions un conteneur IoC pour récupérer les référentiels et avons eu un problème où le contexte attribué au référentiel fermait la connexion après un certain temps mais ne serait pas signalé comme supprimé / similaire. Nous avons finalement étendu le contexte nous-mêmes avec un IsDisposed () qui a vérifié l'état d'élimination habituel et l'état de connexion nous permettant d'en construire un autre si nécessaire.
base

Un autre conseil pratique est que lors de l'obtention d'un nouveau contexte, les objets associés à l'ancien contexte n'auront pas le suivi des modifications approprié et entraîneront des problèmes de correspondance de contexte - Donc, si vous avez une application de longue durée et que vous changez de contexte à mi-chemin - exécution, vous devez récupérer toutes vos entités. Pour rendre les choses plus intéressantes, nous avons dû en fait parfois faire tourner 2 côte à côte et avons fini par écrire du code pour mapper entre les 2 bien ...
Basique

1
@Basiclife J'ai rencontré le même problème :) Je voulais écrire mes réflexions sur la mise à jour des entités détachées depuis un moment et vous venez de m'encourager à faire exactement cela: britishdeveloper.co.uk/2011/03
BritishDeveloper

Réponses:


56

Ces articles pourraient être intéressants ... la série aborde vraiment les avantages et les inconvénients d'une approche POCO.

http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx

http://blogs.msdn.com/b/adonet/archive/2009/05/28/poco-in-the-entity-framework-part-2-complex-types-deferred-loading-and-explicit-loading. aspx

http://blogs.msdn.com/b/adonet/archive/2009/06/10/poco-in-the-entity-framework-part-3-change-tracking-with-poco.aspx

Dans ces articles, l'auteur mentionne de futurs articles qui décrivent les meilleures pratiques dans la mise en œuvre des modèles de référentiel et d'unité de travail, mais je ne les trouve pas. Ces articles sont bien écrits et j'aimerais en savoir plus sur cet auteur.


2
En tant que personne déjà à l'aise avec Entity Framework utilisant le concepteur, c'était une excellente introduction à POCO.
nathanchere

1
Si vous recherchez le suivi de l'unité de travail, il se trouve sur blogs.msdn.com/b/adonet/archive/2009/06/16
Mike

11

Je suis tombé sur ceci: http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-code-only-for-the-entity-framework.aspx

Ce qui vous donne d'abord le code étape par étape. Il nécessite le CTP 3 pour EF4 (téléchargement lié à partir de cet article).

C'est assez proche de ce que je recherchais (même si idéalement une solution qui ne repose pas sur un CTP aurait été préférable)


NB: Ce CTP était initialement pour VS2010 Beta mais prend également en charge VS2010 RTM.
base

7

Je vous recommande de prendre environ une demi-heure et de générer un modèle EF1.0 stable dans votre VS actuel. Cela vous permettra de comprendre les métaphores et les concepts d'EF 4.0. Il suffit de créer un simple client, produits et commandes db ... Je recommande de faire le vôtre et de ne pas utiliser Northwind.


4

C'est une excellente question, mais difficile à tenir à jour car Entity Framework continue de mûrir. La page EF de Microsoft est probablement le meilleur endroit pour commencer qui restera à jour dans le futur .

Quelques autres liens que j'ai trouvés utiles lors de la recherche sur Google (axés sur Code First):


3

Vous pouvez prendre le livre de Lerman ou quelque chose de plus simple comme "Pro linq object-relational mapping". Tous les concepts sont toujours les mêmes avec POCO, sauf que maintenant vous devez désactiver la génération de code et mapper directement à votre modèle dans edmx csdl (ou créer votre propre générateur POCO). Tous les principes de cartographie sont également les mêmes. Quoi qu'il en soit, au moment de l'exécution, vous travaillez avec un proxy dérivé de votre objet POCO, vous devez donc vous préoccuper de la prise en charge de l'interception (virtualisation de vos propriétés POCO).



2

Voici une procédure pas à pas sur le modèle POCO pour Entity Framework qui avait l'air plutôt bien. Vous pouvez également consulter le blog de l'équipe ADO.NET . Si vous voulez commencer par le début (EF v1.0) comme base de vos connaissances EF, j'ai trouvé le livre Programming Entity Framework de Julia Lerman très complet.


Merci - Je n'avais pas vu le livre mais j'ai lu les deux liens fournis. La procédure pas à pas du modèle est utile pour expliquer comment des fonctionnalités supplémentaires peuvent être ajoutées aux objets POCO une fois qu'ils sont définis (par exemple, le chargement paresseux) mais (et il me manque peut-être quelque chose d'évident ici), cela n'explique pas vraiment comment commencer (c'est-à-dire simplement créer une classe comme spécifié n'en fait pas une entité et ne l'associe pas à un modèle) J'ai eu une expérience similaire avec le blog. J'envisagerai cependant d'obtenir le livre - Il semble prometteur - Merci.
base

2
En ce qui concerne le livre de Julia Lerman, il convient de mentionner qu'elle travaille sur une deuxième édition couvrant EF4: learnentityframework.com/LearnEntityFramework/book/… . Je me souviens que j'ai lu quelque part que la date de publication prévue est en mai de cette année mais je ne trouve plus la source. Aussi je viens de trouver ce site: nakedobjects.net/home/index2.shtml
Slauma

Slauma, le lien que vous avez fourni ressemblait exactement à ce dont j'avais besoin - sauf qu'il utilise une bibliothèque tierce "Naked Obects" qui semble en quelque sorte obscurcir la complexité - Pendant une minute, je pensais que vous l'aviez craqué
Basique


1

Julia Lerman a une belle série de vidéos d'introduction , d'environ 10 minutes chacune. Ils sont introductifs, mais il existe de nombreux conseils pratiques qui éliminent certains obstacles potentiels à l'apprentissage. J'ai particulièrement aimé sa démonstration de regarder le SQL réel en utilisant SQL Server Profiler.


1

Si vous allez utiliser des cenarios déconnectés, je vous recommande de lire le livre de Julie Lerman: "Programming DbContext", dans le chapitre spécial 4.

J'ai trouvé beaucoup d'exemples dans les blogs, etc., mais presque tous concernent des cénarios connectés.

Je commence aussi. et ces livres m'ont beaucoup aidé. Au fait, je lui ai acheté trois livres.



0

Wow, beaucoup de réponses. Que diriez-vous d'un exemple qui contient une version modifiée de modèles T4 qui génèrent des interfaces POCO + + des référentiels au total?

https://entityinterfacegenerator.codeplex.com


Intéressant et pratique pour tester les référentiels / contextes, mais pourquoi auriez-vous besoin d'abstraire les entités elles-mêmes? Par définition, ils ne devraient pas contenir de code fonctionnel.
base

Vous avez raison. La plupart du temps, les utilisateurs n'auront pas besoin d'interfaces séparées. Mais cela aide les personnes qui souhaitent résoudre des références circulaires et qui souhaitent partager les interfaces, et non les classes réelles, avec un tiers. Cela aidera beaucoup si votre entreprise doit passer un audit avec une intégration tierce qui ne nécessite aucune implémentation détaillée dans le partage.
Believe2014
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.