101 votes

Passez la chaîne de connexion au code d'abord DbContext

Comment puis-je passer une chaîne de connexion à l'entity framework code first DbContext? Ma base de données génération fonctionne correctement lorsque les deux DbContext et la chaîne de connexion dans le web.la config est dans le même projet et nommées de la même manière. Mais maintenant, j'ai besoin de déplacer le DbContext pour un autre projet, donc je me suis mise à l'essai en passant d'une chaîne de connexion comme suit:

Modèle & Contexte

public class Dinner
{
    public int DinnerId { get; set; }
    public string Title { get; set; }
}

public class NerdDinners : DbContext
{
    public NerdDinners(string connString)
        : base(connString)
    {
    }
    public DbSet<Dinner> Dinners { get; set; }
}

Action

    public ActionResult Index()
    {
        var db = new NerdDinners(ConfigurationManager.ConnectionStrings["NerdDinnerDb"].ConnectionString);

        var dinners = (from d in db.Dinners
                      select d).ToList();
        return View(dinners);
    }

Web.Config

<connectionStrings>
  <add name="NerdDinnerDb" connectionString="Data Source=|DataDirectory|NerdDinners.sdf" providerName="System.Data.SqlServerCe.4.0"/>    
</connectionStrings>

Si j'ai mis un point d'arrêt dans l'action une analyse de l' db, la chaîne de connexion est là, mais il ne permet pas de créer ou de trouver la base de données ou de quoi que ce soit.

Une liée au réseau ou spécifique à l'instance erreur s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur n'a pas été trouvé ou n'est pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions à distance. (fournisseur: Fournisseur de canaux Nommés, erreur: 40 - impossible d'ouvrir une connexion à SQL Server)

101voto

BitFiddler Points 759

Un peu tard dans le jeu ici, mais une autre option est:

60voto

Shawn Mclean Points 16701

Après avoir lu les documents, je dois passer le nom de la chaîne de connexion à la place:

38voto

mishrsud Points 666

J'ai pensé ajouter ce bit pour les gens qui viennent à la recherche de "Comment passer d'une chaîne de connexion à un DbContext": Vous pouvez construire une chaîne de connexion de votre sous-jacente de la banque de données et de transmettre l'ensemble de la chaîne de connexion pour le constructeur de votre type dérivé de DbContext.

(Ré-utilisant le Code de @Lol Coder) Modèle & Contexte

public class Dinner
{
    public int DinnerId { get; set; }
    public string Title { get; set; }
}

public class NerdDinners : DbContext
{
    public NerdDinners(string connString)
        : base(connString)
    {
    }
    public DbSet<Dinner> Dinners { get; set; }
}

Ensuite, dire que vous construisez une chaîne de Connexion Sql à l'aide de la SqlConnectioStringBuilder comme suit:

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(GetConnectionString());

Où la GetConnectionString méthode construit la chaîne de connexion appropriée et la SqlConnectionStringBuilder assure la chaîne de connexion est syntaxiquement correct; vous pouvez ensuite instancier votre db conetxt comme suit:

var myContext = new NerdDinners(builder.ToString());

30voto

Kinh Pham Points 51

Dans votre DbContext, créez un constructeur par défaut pour votre DbContext et héritez de la base comme ceci :

2voto

MKunstman Points 16

Si vous construisez la chaîne de connexion dans l'application, alors vous utiliseriez votre commande de connString. Si vous utilisez une chaîne de connexion dans le site config. Ensuite, vous utilisez le "nom" de cette chaîne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X