2009-09-26 7 views
4

Je suis sur le point de commencer à travailler sur un nouveau projet et je me demande si «Code Only» est la bonne solution. Nous considérons également l'autre approche modèle par le concepteur, mais préférerions concevoir mes modèles de domaine en dehors du concepteur EF.Entity Framework V4: Considérations relatives aux performances «Code uniquement»

Notre domaine contiendra probablement plus de 100 entités. J'ai lu qu'un grand nombre d'entités peut ralentir un peu EF (c'est-à-dire: créer le contexte et le premier appel à SaveChanges).

Puisqu'il n'y a pas de fichier EDMX pour stocker les métadonnées, cette approche est-elle susceptible d'être plus lente? J'ai cherché sur le web mais je n'ai pas pu trouver d'informations à ce sujet. Je sais que ce n'est encore que dans CTP et qu'il manque beaucoup de fonctionnalités, mais je ne cherche que des informations et des conseils à ce stade.

+0

Les gens qui pensent que beaucoup d'entités ralentissent la première utilisation du contexte sont les les personnes qui n'ont pas trouvé la génération de génération de vue à la compilation ture encore. –

+0

Très bien, c'est intéressant. Mais cette fonctionnalité fonctionne-t-elle avec "Code seulement"? – Joepro

+0

Je ne sais pas. Peut-être Alex James va entrer? –

Répondre

1

Comme .NET 4, y compris EF4 est Beta 1 actuellement, vous n'obtiendrez pas de réponse générale utile. Pour votre cas spécifique, pourquoi ne pas tester.

Créez un modèle d'entité avec une entité et exécutez des tests de performances. Puis développez le modèle pour avoir plus d'entités et réexécutez le test. S'il y a un impact sur le rendement du nombre d'entités dans le modèle, vous devriez voir une différence de performance. N'oubliez pas de réduire les effets de charge, sauf si vous êtes uniquement intéressé par les applications qui démarrent, effectuent une seule opération et puis s'éteignent.

+0

Ce n'est pas tout à fait la réponse que je cherchais, mais étant donné le contexte c'est probablement la meilleure chose à faire (seulement?) – Joepro

4

En interne Le code uniquement met en mémoire cache les métadonnées. Une fois le premier contexte créé, vous devriez constater une très faible différence de performance entre le code uniquement et l'approche EDMX.

Vous avez raison qu'un grand nombre d'entités peuvent ralentir EF.

Les vues Pregenerating sont souvent recommandées pour améliorer les performances des modèles volumineux. Mais cette fonctionnalité repose sur l'existence d'un fichier EDMX, il n'est donc pas surprenant que cela ne fonctionne pas avec le code uniquement.

Toutefois, si vous avez besoin de pré-compiler des vues, vous pouvez toujours utiliser la fonction ToEdmx() ​​de CodeOnly pour passer du monde CodeOnly au monde EDMX standard. Et bien sûr, une fois dans le monde EDMX, vous pouvez pré-compiler vos vues.

Cependant ce n'est pas nécessairement l'approche que je prendrais.

Je pense qu'un contexte avec 100 ou plus de propriétés IQueryable n'est pas idéal du tout dans une perspective d'utilisabilité. Donc, plutôt que de passer du code uniquement aux vues pré-génération, je tirerais probablement parti de la capacité de Code-Only à créer des sous-domaines ciblés plus petits, afin de minimiser la taille effective du modèle pour la partie de l'application sur laquelle vous travaillez. Le résultat serait un certain nombre d'ObjectContexts rapides et faciles à utiliser, ciblés pour l'ensemble des tâches en cours.

Quelle IMHO est beaucoup plus souhaitable.

Hope this helps

Alex

+0

+1: ceci est généralement vrai. Voir http://stackoverflow.com/questions/1481754/entity-framework-v4-code-only-performance-considerations Je souhaite, cependant, que tous les EntitySets ne soient pas automatiquement des propriétés du ObjectContext (ou du moins puissent être désactivés)). Idéalement, seules les racines agrégées seraient des propriétés publiques. –

+0

Oups. Mauvais lien. Devrait avoir été http://devlicio.us/blogs/casey/archive/2009/05/14/commercial-suicide-integration-at-the-database-level.aspx –

+1

Nous avons explicitement fait tout notre possible pour soutenir les racines agrégées en code seulement. Par exemple, vous pouvez avoir un ObjectContext avec juste un ObjectSet <> mais il peut facilement avoir plusieurs EntitySets. Facile à configurer aussi. –

Questions connexes