Je suis sûr qu'il est possible de profiler les commandes SQL de la bibliothèque d'entreprise, mais je n'ai pas été en mesure de déterminer comment envelopper la connexion. C'est ce que j'ai proposé:
Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetStoredProcCommand(PROC); ProfiledDbCommand cmd = new ProfiledDbCommand(dbCommand, dbCommand.Connection, MvcMiniProfiler.MiniProfiler.Current); db.AddInParameter(cmd, "foo", DbType.Int64, 0); DataSet ds = db.ExecuteDataSet(cmd);
3 Réponses :
Vous pouvez essayer quelque chose comme ça.
public override DbDataAdapter CreateDataAdapter() { return tail.CreateDataAdapter(); }
Comment est-ce différent de ce que j'ai posté?
S'il vous plaît voir ma réponse mise à jour. Nous étions également utiles sur la manière d'utiliser mini profileur avec Entlib. Devra aller si cela en détail quelque temps.
Ce code ne compile pas. Vous ne pouvez pas passer d'une DBConnection à la méthode ExecutéeAtaset. De plus, la propriété de connexion de DBCOMMAND est NULL.
Votre réponse mise à jour n'utilise efficacement pas la bibliothèque d'entreprise.
@Regent, cherchez-vous une solution sans changer Entlib? Comme vous pouvez télécharger le code source. J'ai trouvé ce que le problème veut simplement savoir si vous acceptez si je modifie légèrement le code source Entlib?
La solution préférée impliquerait juste d'envelopper la commande ENTLIB et la magie du profilier prendrait soin du reste. Pour moi, devoir ajouter du code supplémentaire à CreateCommand () et fermer la connexion invalide l'utilisation de Entlib. Je devrais également changer de code dans chaque méthode d'accès aux données.
@ Goalie7960, sans créer de nouvelle classe qui hérite de la base de données de la classe abstraite, dans Microsoft.practices.enterpriselibrary.data Il n'y a aucun moyen de le faire.
@Jethro, idéalement, j'utiliserais profiledsqldatabase: base de données code> qui fournira à la magie de tous les profileurs.
@Regent, j'ai eu la même pensée. Même commencé à mettre en œuvre la même fonctionnalité que la base de données SQL. Je vais voir ce que je peux faire sur la mise en œuvre de cela.
Est-il préférable d'avoir la base de données Profile SQL: base de données SQL?
@ Gualie7960, ce serait mieux, mais ce n'est pas possible, vous voyez que le problème vient dans ce cas lorsque vous utilisez SQLDatabase, des méthodes spécifiques sont exécutées qui n'appartiennent qu'appartenant uniquement à SQL Server, étaient ProfiledDbProviderFactory utilise les méthodes génériques de DBProviderFactory. Pour être honnête, je suis assis ici en train de tirer mes cheveux en essayant de faire fonctionner cela, je ne peux pas croire à quel point c'est difficile. Je pense que j'ai peut-être une solution, mais cela signifie remplacer la plupart des méthodes de base de données abstraites. Va essayer de continuer avec ce demain.
@Jethro peut-être qu'il vaut mieux poster cela à la question suivante de ce projet?
@ Goalie7960, veuillez consulter mon poste mis à jour, il s'agit déjà d'un problème 19, qui devrait trier cela. J'ai essayé mais je viens de me retrouver dans des cercles, cet espace de noms.Data est effrayant. Je suis aussi maintenant après quelques heures de même que l'espace de noms de données Entlib. Tant pis.
L'exception vient de cette ligne dans Entlib Database.DoLoadDataSet
Database db = DatabaseFactory.CreateDatabase(); DbCommand dbCommand = db.GetStoredProcCommand("spGetSomething"); DataSet ds = db.ExecuteDataSet(dbCommand);
Cela fonctionne bien. Je ne pouvais pas comprendre le modèle des fournisseurs. Une chose cependant, existe-t-il un moyen de supprimer dbcommand cmd = nouveau profileddbCommand (dBCommand, dbcommand.connection, miniprofiler.Current); et avoir le db.gettsoredProccommand () renvoyer une commande profilée? Je sais que je peux faire via la méthode assistée, mais une solution de configuration serait tellement plus agréable.
Ceci est un post assez et ancien, mais je pense que sa valeur ne mérite de mentionner ce que j'ai trié cela.
En raison de la mise en œuvre de notre application, il n'était pas facile d'appliquer la solution par Jonas, alors je suis allé en bas de la route de la modification de l'englib de Datablock (que j'ai déjà modifié dans notre projet). P>
La chose était aussi simple que de modifier les méthodes doexecuexxx dans la classe de base de données afin d'appeler le minirofiler, qui a précédemment ont changé pour exposer le SQLProfiler comme public. p>
juste faire: p> au début de chaque méthode et p> dans le bloc enfin fait l'astuce. Il suffit de modifier le type d'exécution à la méthode appropriée pour la méthode modifiée. P> L'instance MiniProfiler a été obtenue dans le constructeur de la base de donnéesClass p>
Jusqu'à présent, je n'ai pas trouvé comment utiliser MVC mini profiler avec < Un href = "http://msdn.microsoft.com/en-us/library/ff6489951.aspx" rel = "Nofollow Noreferrer"> Bibliothèque d'entreprise aussi ...
@ Gualie7960, veuillez consulter ma réponse mise à jour pour une solution à ce problème.