web-dev-qa-db-fra.com

EntityFramework - Où se trouve la chaîne de connexion?

J'ai supprimé la chaîne de connexion de mon web.config et Entity Framework se connecte toujours à la base de données! Où la chaîne de connexion est-elle définie? Ceci est un problème car je dois faire en sorte que la version en direct de mon site Web pointe vers la base de données en direct.

19
Ian Warburton

Voici un casse-tête que j'ai trouvé avec la philosophie de la "convention sur la configuration" lorsqu'il s'agit d'essayer de se connecter à des bases de données existantes (comme vous le faites).

Si votre classe DbContext (par exemple, Northwind) se trouve dans un espace de noms (par exemple, MvcProject), EF ne correspondra en aucune manière au nom de la classe avec une chaîne de connexion dans web.config nommée "Northwind" (ou "MvcProject.Northwind") et crée ensuite une chaîne de connexion par défaut à l’instance SQLEXPRESS locale, avec une base de données appelée "MvcProject.Northwind". Ce sera une base de données vide. Et vous allez vous casser la tête en essayant de comprendre pourquoi vous ne récupérez aucune donnée, jusqu'à ce que vous réalisiez que vous n'êtes pas connecté au bon DB.

La façon dont j’ai contourné ce problème (pas élégant mais c’est le moyen le plus rapide que j’ai trouvé de le réparer): ajoutez un constructeur à votre classe DbContext qui appelle la base avec le nom de la chaîne de connexion dans web.config - par exemple. 

namespace MvcProject
{
    public class Northwind : DbContext
    {
        public Northwind() : base("Northwind") {}
    }
}

J'espère que cela aide quelqu'un ;-)

16
Omri Gazitt

Vous aurez besoin de quelque chose comme ça:

<configuration>
  <connectionStrings>
    <add name="MyContext"
         connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=YourDatabaseName"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

Ou si votre base de données réside dans le dossier App_Data:

<configuration>
  <connectionStrings>
    <add name="MyContext"
         connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|YourDatabaseFilename.mdf;User Instance=True"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

Remplacez MyContext par le nom de votre classe qui étend DbContext.

9
waz

L'EF n'a pas pu trouver la connexion pour moi mais j'ai utilisé la chaîne de connexion dans la base ():

namespace MvcProject 
{     
    public class Northwind : DbContext     
    {         
        public Northwind() : 
            base("Data Source=servername;Initial Catalog=database;User ID=yourID;Password=yourPass;Trusted_Connection=False;") {}
    }
}  

Juste pour tester la connexion et ça a fonctionné.

4
Beto Nogueira

Convention> Configuration, non?

Par défaut, EF Code crée d’abord une base de données dans votre instance SQL Express locale.

2
Nathan Craddock

J'ai rencontré le même problème et j'ai simplement changé le nom de ma chaîne de connexion comme suggéré dans le fichier web.config en tant que nom de la base de données contextuelle. 

1
Mubashar Sajjad

Regardez dans App.Config. Il sera stocké là aussi.

1
Chad Yeates

Faites un clic droit sur votre mode Entity Framework (fichier edmx)> allez à Propriétés. Vous verrez la chaîne de connexion ici.

Si votre modèle d'entité se trouve dans un projet séparé, il doit alors se trouver dans son propre fichier de paramètres.

0
neebz

Si vous utilisez d'abord le code avec DbContext, vous pouvez placer une chaîne de connexion dont le nom correspond au nom de votre classe de contexte dans votre web.config. Cela fonctionnera parfaitement.

0
Alexander Taran