S'il est mauvais d'utiliser SQL en ligne, comment le fait d'utiliser LINQ pour effectuer des requêtes différentes dans la pratique?

voix
13

Quel est le consensus général sur l'utilisation de LINQ pour effectuer des requêtes et en ligne de manipulation et comment cela diffère d'intégrer des instructions SQL dans votre code (qui est considéré comme un non non)?

Créé 27/08/2009 à 03:20
source utilisateur
Dans d'autres langues...                            


9 réponses

voix
1

Intégration instruction SQL dans votre code est pas mal. Tout dépend de quelle couche de votre application que vous les écrivez.

Tout ce qui est lié à la lecture et l'écriture dans la mémoire de données, devrait être mis sur la couche d'accès aux données.

Créé 27/08/2009 à 03:25
source utilisateur

voix
1

Deux avantages de « sql Linq » par rapport à (commun pire cas) « SQL en ligne » .

Les paramètres sont traités comme des paramètres, pas seulement du texte comme concaténés - ce surmonte les problèmes d'injection SQL.

La couche de modèle séparé permet de vérifier que la compilation le SQL généré correspondra au schéma. (Dans le pire des cas de sql en ligne, vous auriez aucun moyen de savoir au moment de la compilation si vous référencez une colonne qui avait été supprimée, par exemple)

Créé 27/08/2009 à 03:27
source utilisateur

voix
0

D'une part les déclarations LINQ sont paramétrés - requêtes en ligne sont pas nécessairement. D'autre part, LINQ crée essentiellement une couche ORM - objets de base de données permettant de traiter essentiellement comme des objets dans le code - fournir la compilation de vérification du temps. Une requête en ligne d'autre part est un blob de texte qui ne cassera pas au moment de la compilation ...

Créé 27/08/2009 à 03:28
source utilisateur

voix
0

En regardant les autres réponses, peut-être je mal compris la question ... mais je parle de LINQ normal collections en C #, pas LINQ to SQL:

Lorsque vous intégrez SQL déclarations dans votre code (par opposition à des variables en les rendant ou autrement votre SQL paramétrage), vous rend beaucoup plus difficile pour vous - même si vous voulez soutenir une autre base de données à l'avenir. Comme ancien et standardisé que SQL est, il y a encore beaucoup d' incompatibilités entre les vendeurs.

Avec LINQ, la portabilité n'est plus un problème - votre code est écrit en C # et LINQ est C #.

Créé 27/08/2009 à 03:31
source utilisateur

voix
7

Ignorant toutes les utilisations liées à la non-SQL de LINQ et juste compte tenu de LINQ to SQL.

Les requêtes LINQ sont des objets qui conservent une requête définition et SQL équivalente est instancier uniquement au moment où la requête est en fait itérer. Cela permet à des composants séparés et correctement permettent un traitement de type pipeline où les requêtes sont renvoyées par les couches inférieures (par exemple. Par des dépôts) et transformés par des composants plus élevés sur la pile. La requête peut accueillir de nouveaux filtres, joints et autres artefacts « » de chaque composant dans le tube de traitement, jusqu'à ce qu'il atteigne la forme finale qui est éventuellement répété. Cette manipulation est impossible dans la pratique en utilisant SQL texte droite.

Un autre avantage de LINQ est que sa syntaxe est plus facile à comprendre pour les développeurs non-base de données. L' expertise de syntaxe SQL est un étonnamment difficile à trouver actifs. Peu de développeurs sont prêts à passer du temps d' apprentissage des points plus subtils de SQL au - delà SELECT * FROM ... WHERE .... La syntaxe LINQ est plus proche de l'environnement quotidien .Net et met à profit les compétences existantes fixé à cette couche (par exemple. Les expressions lambda) par opposition à forcer le développeur à apprendre le SQL approprié pour la fin ciblée arrière (T-SQL, PL-SQL etc). Étant donné que l'expression LINQ exprime le résultat souhaité à peu près droit dans l' algèbre relationnelle, les fournisseurs ont une tâche beaucoup plus facile à générer le SQL approprié (ou même générer directement le plan d'exécution!). Comparez cela avec la tâche impossible des pilotes de base de données « génériques » ont dû faire face avec le texte précieusement SQL. Rappelez - vous la syntaxe d'échappement ODBC, anyone?

Créé 27/08/2009 à 03:32
source utilisateur

voix
0

De ma petite compréhension, si vous utilisez LINQ to SQL ou tout autre ORM ou votre propre code qui renvoie les appels SQL, il est essentiellement de vous donner une abstraction dans laquelle vous n'avez pas à vous soucier de SQL.

De plus, si je ne me trompe pas - LINQ to SQL ne supporte que SQL Server.
Je pense, il vous permet de construire vos critères dans une requête SQL comme manière en utilisant la syntaxe LINQ.

Personnellement, je ne sais pas pourquoi quelqu'un utiliser LINQ to SQL.
Un expert peut me aider à comprendre le besoin?

Créé 27/08/2009 à 03:34
source utilisateur

voix
0

À une certaine ligne de code, quelqu'un, quelque temps, décidera s'il est approprié de saisir le SQL. Mais au lieu de le faire, vous allez utiliser LINQ.

Il est donc pas une question si LINQ doit être inline lorsque SQL ne devrait pas. La question est où vous voulez que votre représentation d'accès au stockage de données soit. Si vous écrivez LINQ à une ligne de code, et vous ne vous sentez pas à l'aise de cette envergure ayant accès aux données stockées, il est au mauvais endroit.

LINQ est juste une abstraction pour la manipulation de données. Il est un raccourci pour les ensembles de filtrage. Tout comme les bases de données comprennent SQL, l'environnement .NET a un langage pour parler avec des données.

Quelle est la différence entre LINQ et de faire si les déclarations dans une boucle, sur des données fournies à partir d' un fichier ou d' une prise réseau? Aucun, il est juste la syntaxe. Si vous SELECT * FROM table, chaque ligne de filtrage contre une fonction, quelle est la différence de faire where c.SomeProperty < xavec LINQ? Juste la syntaxe.

Bien sûr, LINQ et sait faire plus que simplement le retour des lignes d'une base de données. Il vous permet d' instancier des objets d'une collection, mais le fait = new ClassName(column1, colum2)de résultats de l' instruction SQL.

Bref, si l'écriture quelque part SQL en ligne dans votre code est un non-non, il devrait donc être en train d'écrire LINQ.

Mais cela varie d'un projet à. Les bases de données comprennent principalement SQL, donc au moins quelque part dans votre code, la bibliothèque ou de l'environnement il y a inline SQLs.

Créé 27/08/2009 à 03:49
source utilisateur

voix
5

Vous avez raison: « déclaration Embedding SQL dans votre code est pas mal. » C'est terrible.

Cela rend votre application très couplé, fragile et difficile à maintenir. Au moins, si vous avez tout à procs, lorsque vous modifiez quelque chose, vous pouvez faire une recherche sur les dépendances.

procs stockées, je me sens vraiment besoin d'aller aussi pour les procs qui manipulent la logique métier.

La raison est que la logique métier appartient à la couche d'affaires - pas la couche de données.

Bien sûr, si le LINQ à SQL généré se révèle quelque chose en désordre et lent, vous devez utiliser un proc.

L'un des grands avantages de LINQ to SQL est que vous pouvez enchaîner les filtres - vous êtes clause where est vient d'être ajouté dynamiquement par votre logique au besoin. Vous n'avez pas besoin de créer de nouveaux procs juste parce que vous voulez faire appel à un ensemble de données basées sur plusieurs params.

Créé 27/08/2009 à 04:01
source utilisateur

voix
0

Ont travaillé avec SQL embedded, le vrai danger est qu'il est une technologie de génération de code. Vous écrivez le code C (ou autre langue), puis vous passez à SQL, puis de nouveau à C à nouveau. Plus tard avant la compilation d'un prepocessor réécrit le code à tous C. Les résultats peuvent générer des messages d'erreur très confus. Vous êtes obligé d'apprendre l'API pour interagir avec la base de données qui était censé vous libérer SQL embarqué à partir. Enfin, vous courez le risque d'intégration des règles métier dans vos requêtes confondant la couche d'affaires et de la couche de données. LINQ évite certaines de ces question. Tout d'abord, Linq fait partie de la langue. Les constructions fonctionnent plus ou moins comme un programmeur attend. Il y a une syntaxe de type SQL impliqué, mais surtout la syntaxe se concentre sur la langue d'accueil (C #). Les contrôles de compilation sont effectuées sur le code réel que vous avez écrit. Il n'y a pas à cet effet besoin de traduire les erreurs dans la syntaxe avant prétraiter. Les résultats de la requête sont des objets et des collections, tout comme on peut s'y attendre. Il y a encore un risque de mélange logique métier dans la couche de données cependant. De plus, Linq a ses propres problèmes avec des messages d'erreur lorsque le champ en question est souvent inclus. Néanmoins, il est un bon compromis entre le monde de l'objet et le monde relationnel.

Créé 17/08/2010 à 14:26
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more