11
votes

Pourquoi le cadre d'entité apporte-t-il tant de demi-arrivées dans la base de données?

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: xxx

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 xxx

est un moyen de minimiser tous les appels de base de données?


0 commentaires

3 Réponses :


-3
votes

Cela peut être fait, mais c'est extrêmement douloureux dans .NET 3.5. Ils ont rendu beaucoup plus facile à .NET 4.0.


0 commentaires

8
votes

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); 


1 commentaires

Vous ne pouvez pas utiliser 'cette entitétraference ' pour éviter le explicite lorsque vous appelez SetentityKey?



11
votes

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

En outre, tout cela tombe dans le domaine sur "Optimisation" qui n'est pas souvent aussi simple qu'il semble

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

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?

Si l'application et le serveur SQL sont sur la même machine, ce surcharge est très petit

É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 :-)


0 commentaires