8
votes

Comment utiliser une chaîne de connexion EntityFramework pour Elmah?

in Elmah Pour les erreurs de journalisation de la base de données, vous pouvez écrire: xxx

Cependant, si j'utilise EntityFramework, cela ne fonctionne pas car la chaîne de connexion pour EF contient également des métadonnées: < / p> xxx

Alors, comment puis-je utiliser la chaîne de connexion EntityFramework à Elmah?


2 commentaires

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 ??


4 Réponses :


2
votes

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 ), et mettez cela dans sa propre entrée dans le section de votre web.config: xxx

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

marc


0 commentaires

10
votes

1

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


2 commentaires

A ATTENTION: Si vous avez besoin d'un mot de passe 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 remplacer la chaîne de connexion par défaut d'Elmah. Comment je fais ça?



4
votes
    <elmah>
        <errorLog type="YourAssembly.YourErrorLog, YourAssembly" connectionStringName="elmah-sqlserver" />
    </elmah>

2 commentaires

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.



0
votes

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 ElmahContext Accepte le nom du schéma.


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 elmah.errorlog qui passera l'objet elmah.errorlog à 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.


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 .