Question

Je me suis trouvé de plus en plus insatisfaits avec le jeu de données/DataTable/DataRow paradigme .Net, surtout parce que c'est souvent un peu plus compliqué que ce que je veux vraiment faire.Dans le cas où je suis de liaison pour les contrôles, les ensembles de données sont beaux.Mais dans d'autres cas, il semble y avoir un juste montant de la surcharge mentale.

J'ai joué un peu avec SqlDataReader, et qui semble être bon pour de simples balades à travers une sélection, mais je me sens comme il peut y avoir certains autres modèles tapie dans .Net qui sont utiles pour en savoir plus sur.J'ai envie de tous de l'aide que j'ai trouver sur ce utilise juste un DataSet par défaut.Peut-être que et DataReader sont vraiment les meilleures options.

Je ne suis pas à la recherche pour un meilleur et le pire/ventilation, juste curieux de savoir quelles sont mes options et les expériences que vous avez eues avec eux.Merci!

-Eric Sipple

Était-ce utile?

La solution

Depuis .NET 3.5 est sorti, j'ai exclusivement utilisé LINQ.C'est vraiment bon;Je ne vois pas de raison pour utiliser l'une de ces vieilles béquilles plus.

Aussi grand que LINQ est, bien, je pense que tout ORM système vous permettra de faire disparaître que dreck.

Autres conseils

Nous sommes passés d'ensembles de données et construit notre propre PLATEFORME d'objets vaguement basé sur L'AAPC.Vous pouvez obtenir le même travail effectue à l'aide d'un jeu de données ou de LINQ ou ORM, mais de ré-utilisation, il est (nous l'avons trouvé) beaucoup plus facile."Moins de code à rendre plus heureux".

J'en avais marre avec les ensembles de données .Net 1.1, au moins, ils ont optimisé de sorte qu'il n'est pas lent que de façon exponentielle pour les grands ensembles, pas plus.

Il a toujours été plutôt gonflé modèle - je n'ai pas vu beaucoup d'applications qui utilisent la plupart de ses caractéristiques.

SqlDataReader était bon, mais j'ai utilisé l'envelopper dans un IEnumerable<T> où le T a certains tapé la représentation de ma ligne de données.

Linq est un bien meilleur remplacement, à mon avis.

J'ai été en utilisant le Objets De Transfert De Données motif (à l'origine du monde Java, je crois), avec un SqDataReader pour remplir les collections de l'Otd de la couche de données pour utilisation dans d'autres couches de l'application.Les Dto sont eux-mêmes très léger et simple des classes composé de propriétés obtient ou définit.Ils peuvent facilement être sérialisé/désérialisé, et utilisé pour la liaison de données, les rendant assez bien adapté à la plupart de mes besoins de développement.

Je suis un grand fan de SubSonic.Un bien écrit lot/CMD fichier pouvez générer un ensemble de modèle d'objet de votre base de données en quelques minutes;vous pouvez le compiler dans son propre DLL et l'utiliser au besoin.Magnifique modèle, outil merveilleux.Le site met à sonner comme un ASP.NET traiter, mais en général ça fonctionne à merveille juste au sujet de n'importe où si vous êtes, ne pas essayer d'utiliser son framework d'INTERFACE (dont je suis moyennement déçu) ou de son application au niveau de l'auto-génération d'outils.

Pour mémoire, voici une version de la commande que j'utilise pour travailler avec elle (de sorte que vous n'avez pas à lutter contre elle trop dur au début):

sonic.exe generate /server [servername] /db [dbname] /out [outputPathForCSfiles] /generatedNamespace [myNamespace] /useSPs true /removeUnderscores true

Qui le fait à chaque fois ...Ensuite générer la DLL de descendre de l'annuaire, c'est une partie d'un NAnt projet, lancé par CruiseControl.NET -- et c'est reparti.Je suis sur que dans les WinForms, ASP.NET même certains de ligne de commande utils.Cela génère le moins de dépendances et le plus grand de la "portabilité" (entre autres projets, par exemple).

Note

Le ci-dessus est maintenant bien plus d'un an.Bien que je garde une grande tendresse dans mon cœur pour Subsonique, je me suis déplacé à LINQ-to-SQL, quand j'ai le luxe de travailler dans .NET 3.5.Dans .NET 2.0, je l'utilise encore Subsonique.Donc, mon nouveau avis officiel de la plate-forme dépendant de la version.Dans le cas d' .NET 3+, rendez-vous avec la accepté de répondre.Dans le cas d' .NET 2.0, rendez-vous avec Subsonique.

Les jeux de données sont grands pour les démos.

Je ne sais pas quoi faire avec si vous avez fait de moi de l'utiliser.

J'utilise ObservableCollection

Puis, de nouveau, je suis dans l'application cliente de l'espace, WPF et Silverlight.Donc, le passage d'un jeu de données ou datatable dans un service ...brut.

DataReaders sont rapides, car ils sont un en avant uniquement les flux de l'ensemble de résultats.

J'ai utilisé tapé à la machine et non typée ensembles de données, DataViewManagers, DataViews, tables de données, des datarow, DataRowViews, et tout ce que vous pouvez faire avec la pile puisqu'il est venu premières dans de multiples projets d'entreprise.Il m'a fallu un certain temps pour s'habituer à la manière permettre de, il a travaillé.J'ai écrit des composants personnalisés qui tirent parti de la pile ADO.NETdid pas assez donnez-moi ce dont j'ai réellement besoin.Un tel composant compare des ensembles de données et met à jour le backend magasins.Je sais vraiment comment tous ces éléments fonctionnent bien et ceux qui ont vu ce que j'ai fait sont très impressionnés de voir que j'ai réussi à aller au-delà il y a le sentiment qu'il est seulement utile pour la démonstration de l'utilisation.

J'utilise ADO.NET la liaison en Winforms et j'ai aussi utiliser le code dans la console apps.J'ai très récemment fait équipe avec un autre développeur pour créer un ORM que nous avons utilisé à l'encontre d'un fou datamodel qui nous a été donnée de la part des entrepreneurs qui ne ressemblaient en rien à nos banques de données.

J'ai cherché aujourd'hui pour le remplacement de ADO.NET et je ne vois pas quelque chose que je devrait essayer sérieusement à apprendre à remplacer ce que j'utilise actuellement.

Je le les utiliser de façon intensive mais je n'ai pas utiliser les fonctionnalités "avancées" que Microsoft a vraiment pousser lorsque le cadre est sorti.Je suis tout simplement les utiliser comme des Listes de tables de hachage, que je trouve parfaitement utile.

Je n'ai pas vu de bons résultats quand les gens ont essayé de faire de complexe typés, ou essayé de créer les relations de clé étrangère entre les tables avec des jeux de données.

Bien sûr, je suis l'un de l'étrange ceux qui préfère effectivement un DataRow à une entité instance de l'objet.

Pré linq j'ai utilisé DataReader pour remplir la Liste de mon propre domaine d'objets, mais post linq j'ai été en utilisant L2S à remplir L2S entités, ou L2S pour remplir des objets du domaine.

Une fois que j'aurai un peu plus de temps pour étudier, je soupçonne que Entity Framework objets sera mon nouveau favori de la solution!

La sélection d'un moderne, stable et soutenu activement outil ORM doit être probablement le plus grand coup de pouce à la productivité juste au sujet de tout projet de taille moyenne et de la complexité pouvez obtenir.Si vous êtes à la conclusion que vous avez absolument, absolument, absolument écrire votre propre DAL et de l'ORM, vous êtes probablement de faire le mal (ou que vous êtes en utilisant les plus obscurs de la base de données).

Si vous êtes en train de faire raw jeux de données et des lignes, et ce n'est pas, passer la journée à essayer un ORM et vous serez étonné de voir comment beaucoup plus productif, vous pouvez être w/o toutes les corvées de mappage des colonnes de champs ou tout le temps de remplissage de la commande Sql objets et tous les autres hoop saut à nous tous une fois passé par.

J'aime m'Subsonique, mais pour les petits projets à grande échelle avec des démos/prototypes, je trouve Linq to Sql sacrément utile aussi.Je déteste EF avec une passion si.:P

J'ai utilisé typés pour plusieurs projets.Ils modèle de la base de données bien, imposent des contraintes sur le côté client, et en général sont une solide technologie d'accès aux données, en particulier avec les changements .NET 2.0 avec TableAdapters.

Typés mauvaise réputation de gens qui aiment utiliser de l'émotion des mots comme "gonflée" pour le décrire.Je vous l'accorde que j'aime utiliser un bon O/R mappeur de plus que l'utilisation d'ensembles de données;c'est juste "sent" mieux d'utiliser des objets et des collections au lieu de tapé les tables de données, des datarow, etc.Mais ce que j'ai trouvé est que si pour une raison quelconque vous ne pouvez pas ou ne voulez pas utiliser un O/R mappeur, typés sont un bon choix solide qui sont assez faciles à utiliser et vous permet d'obtenir 90% de la rente d'un O/R mappeur.

EDIT:

Certains suggèrent ici que DataReaders sont les "rapide" alternatifs".Mais si vous utilisez un Réflecteur de regard sur le fonctionnement interne d'un DataAdapter (dont les tables de données sont remplis par), vous verrez qu'il utilise...un DataReader.Typés peut ont une empreinte mémoire plus grande que les autres options, mais je n'ai pas encore vu la demande où cela fait une différence tangible.

Utiliser le meilleur outil pour le travail.Ne pas prendre votre décision sur la base de l'émotion des mots comme "brut" ou "gonflée" qui n'ont aucun fondement factuel.

Je viens de créer mon entreprise objets à partir de zéro, et presque jamais utiliser le DataTable et surtout pas le DataSet de plus, à l'exception d'abord remplir le business objects.Les avantages de la construction de votre propre sont la testabilité, la sécurité du type et de l'intellisense, l'extensibilité (essayez de les ajouter à une base de données) et de la lisibilité (sauf si vous aimez lire des choses comme Convertir.ToDecimal(dt.Les lignes[i]["blah"].ToString())).

Si j'avais été plus intelligent je voudrais aussi utiliser un ORM et 3ème partie DI-cadre, mais n'ont tout simplement pas encore ressenti le besoin de ceux-ci.Je fais beaucoup de petits projets de taille ou des ajouts à des projets plus importants.

Je n'ai JAMAIS utiliser des jeux de données.Ils sont de grands poids lourds objets utilisables uniquement (comme quelqu'un l'a souligné ici) pour "demoware".Il ya beaucoup de grands solutions de rechange montré ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top