Je réécrit mon application pour utiliser le cadre d'entité. Ce que je suis confus, c'est que le code que j'écris a l'impression de faire des troncs inutiles le serveur SQL. Par exemple, j'ai un site de réponse de questions similaire à cela. Quand j'ajoute une réponse à une question - voici le code que j'utilise: dans le code ci-dessus il y a 2 appels de base de données juste? Si oui, pourquoi ne puis-je pas ajouter une réponse à une question directement? tels que p> est un moyen de minimiser tous les appels de base de données? p> p>
3 Réponses :
Cela peut être fait, mais c'est extrêmement douloureux dans .NET 3.5. Ils ont rendu beaucoup plus facile à .NET 4.0. P>
Vous n'avez pas vraiment besoin de charger la question pour définir la relation. Au lieu de cela, vous pouvez simplement utiliser l'entitéReference
E.g. P>
Answer.QuestionReference = new EntityReference<Question>(); Answer.QuestionReference.SetEntityKey<Question>(questionId);
Vous ne pouvez pas utiliser 'cette entitétraference
Comme expliqué par Alexj Un des concepteurs EF http://blogs.msdn.com/alexj/archive/2009/06/19/tip-26-how-a-avoid-database-queries-utant -stub-entités.aspx p>
En outre, tout cela tombe dans le domaine sur "Optimisation" qui n'est pas souvent aussi simple qu'il semble p>
Utilisation de l'approche simple, SQL effectuera une opération de lecture pour charger le résultat du FK (question) et le cache, puis sur une commande séparée, une opération d'insertion qui doit utiliser le résultat FK mis en cache P>
Utilisation de la méthode FK ci-jointe entraîne toujours le serveur effectuant une opération de lecture pour le FK, cela signifie simplement un voyage en arrondi moins sur le serveur SQL. Donc, la question devient - au fil du temps est un aller-retour plus cher que la complexité accrue du code? P>
Si l'application et le serveur SQL sont sur la même machine, ce surcharge est très petit p>
Également, si le FK est un indice en cluster sur une table importante ou large, la surcharge IO peut être significativement plus que si elle est un indice standard séparé sur une seule valeur FK - supposant que l'optimisateur de requête fonctionne correctement :-) p>