in Elmah Pour les erreurs de journalisation de la base de données, vous pouvez écrire: Cependant, si j'utilise EntityFramework, cela ne fonctionne pas car la chaîne de connexion pour EF contient également des métadonnées: < / p> Alors, comment puis-je utiliser la chaîne de connexion EntityFramework à Elmah? P> P>
4 Réponses :
Vous ne pouvez pas - au moins pas directement. Ce que vous devriez faire, c'est extraire la partie de la chaîne de connexion EF qui fait référence vraiment à la base de données (la chaîne de connexion ou vous pouvez le faire par programme - le contexte de l'entité disposera d'une propriété appelée "Connexion", qui a à son tour une propriété "ConnectionsRing" , qui est celui que vous recherchez: p> marc p> p> code>), et mettez cela dans sa propre entrée dans le
Vous pouvez extraire la chaîne de connexion de base de données via ConnectionsRingBuilder fournie dans le cadre d'entité. P>
private string ExtractConnectionStringFromEntityConnectionString(string entityConnectionString) { // create a entity connection string from the input EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder(entityConnectionString); // read the db connectionstring return entityBuilder.ProviderConnectionString; }
A ATTENTION: Si vous avez besoin d'un mot de passe B> pour accéder à la base de données, il ne sera pas inclus dans le fournisseurConnectionstring.
Vous avez montré comment extraire la chaîne de connexion et où effectuer le remplacement, mais vous n'avez pas montré comment i> remplacer la chaîne de connexion par défaut d'Elmah. Comment je fais ça?
<elmah> <errorLog type="YourAssembly.YourErrorLog, YourAssembly" connectionStringName="elmah-sqlserver" /> </elmah>
J'ai réussi à exécuter cela, mais j'ai dû créer un constructeur approprié en fonction d'un constructeur de SQLERRORLOG (voir yoda.arachsys.com/cshaarp/constructors.html - constructeurs ne sont pas hérités)
@ Gôtô tout ce que nous connaissons des règles CTOR;) attention s'il vous plaît répondre à la date. Quand je donne ce code, SQLERRORLOG n'a pas de CTOR avec le paramètre, nous parlons de New Elmah Sqlerrolog.
Vous pouvez utiliser
9 commentaires
Existe-t-il un moyen de spécifier différents schéma lorsqu'il est en mode de base de données?
@Santhos: Oui, l'un des CTORS de
Je sais, j'ai vérifié le code, mais cela peut être configuré directement à partir de web.config?
@Santhos: Non, je ne le pense pas, SQL Server Connection String ne permet pas de spécifier le nom du schéma, voir Stackoverflow.com/questions/3282665/...
J'aime votre solution, je dois juste maintenant penser si je voulais vraiment que les tables et les procédures dans mon schéma par défaut et sous le même utilisateur - selon cette question, il semble que l'on dirait qu'il faudrait créer un nouvel utilisateur, attribuer une autre schéma, puis laissez Elmah journal sous cet utilisateur.
@Santhos: Si je comprends bien, un utilisateur que l'application elle-même est exécutée devrait avoir accès à la table ELMAH, sinon elle ne pourra pas y écrire. Avoir des utilisateurs différents, vous devrez avoir une logique distincte dans la personnalisation
J'ai réussi à créer un nouvel utilisateur avec des autorisations uniquement pour exécuter les trois procédures stockées ELMAH et son schéma par défaut est défini sur mon schéma "Elmah" et fonctionne comme charme. Le seul inconvénient est que je ne peux pas utiliser votre bibliothèque.
@Santhos: bravo avec ça! Quel problème tu as avec ça?
Laissez-nous Continuer cette discussion en chat .
ElmahContext code> Accepte le nom du schéma.
elmah.errorlog code> qui passera l'objet
elmah.errorlog code> à un service exécuté sous l'utilisateur dédié. Si vous n'avez qu'un seul utilisateur, vous ne vous trouvez pas avec elle. Je dirais que cela ne vaut pas la peine, c'est une sorte de sur-ingénierie.
Wow, pourquoi ne peut pas simplement utiliser le même format de chaîne de connexion que nous utilisons depuis quoi? 2002? #échouer
Ouais, je veux dire que cela travaille depuis des années, pourquoi le changer est-il ??