Comment puis-je transmettre une chaîne de connexion au DbContext code-first du framework d'entité? Ma génération de base de données fonctionne correctement lorsque DbContext et la chaîne de connexion dans web.config se trouvent dans le même projet et sont nommés de la même manière. Mais maintenant, je dois déplacer le DbContext vers un autre projet, donc je teste en lui passant une chaîne de connexion comme suit:
Modèle et 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 je place un point d'arrêt dans l'action et analyse le db
, la chaîne de connexion est là, mais elle ne crée ni ne trouve la base de données ou quoi que ce soit.
Une erreur liée au réseau ou spécifique à une instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou inaccessible. 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)
la source
Réponses:
Un peu tard dans le jeu ici, mais une autre option est:
la source
Manual changes to this file will be overwritten if the code is regenerated.
dans l'en-tête, alors on peut vouloir l'implémenter dans une classe partielle selon les classes et méthodes partielles (Guide de programmation C #)Après avoir lu la documentation, je dois plutôt passer le nom de la chaîne de connexion:
la source
Je pensais que j'ajouterais ce bit pour les personnes qui recherchent "Comment passer une chaîne de connexion à un DbContext": vous pouvez construire une chaîne de connexion pour votre magasin de données sous-jacent et passer la chaîne de connexion entière au constructeur de votre type dérivé de DbContext .
(Réutilisation du code de @Lol Coder) Modèle et contexte
Ensuite, disons que vous construisez une chaîne de connexion SQL en utilisant le SqlConnectioStringBuilder comme ceci:
Où la méthode GetConnectionString construit la chaîne de connexion appropriée et SqlConnectionStringBuilder garantit que la chaîne de connexion est syntaxiquement correcte; vous pouvez ensuite instancier votre conetxt db comme ceci:
la source
public TestAppContext() : base("Data Source=server.company.com;Initial Catalog=SomeDB;Integrated Security=True") { }
Dans votre DbContext, créez un constructeur par défaut pour votre DbContext et héritez de la base comme ceci:
la source
MyConnectionString
... (oui la chaîne de connexion existe). Je dois mettrename=MyConnectionString
.Si vous construisez la chaîne de connexion dans l'application, vous utiliserez votre commande connString. Si vous utilisez une chaîne de connexion dans le fichier de configuration Web. Ensuite, vous utilisez le "nom" de cette chaîne.
la source
J'ai un petit exemple de solution pour ce problème.
MyDBContext.cs
MyClass.cs
frmMyForm.cs
la source
Vérifiez la syntaxe de votre chaîne de connexion dans le fichier web.config. Cela devrait être quelque chose comme
ConnectionString="Data Source=C:\DataDictionary\NerdDinner.sdf"
la source
Lors de l'utilisation d'un modèle EF, j'ai une chaîne de connexion dans chaque projet qui consomme le modèle EF. Par exemple, j'ai un modèle EF EDMX dans une bibliothèque de classes distincte. J'ai une chaîne de connexion dans mon projet web (mvc) afin qu'il puisse accéder à la base de données EF.
J'ai également un autre projet de test unitaire pour tester les référentiels. Pour que les référentiels puissent accéder à la base de données EF, le fichier app.config du projet de test a la même chaîne de connexion.
Les connexions DB doivent être configurées, non codées, IMO.
la source
Je ne vois rien de mal avec votre code, j'utilise SqlExpress et cela fonctionne bien lorsque j'utilise une chaîne de connexion dans le constructeur.
Vous avez créé un dossier App_Data dans votre projet, n'est-ce pas?
la source
Pour tous ceux qui sont venus ici pour essayer de savoir comment définir la chaîne de connexion de manière dynamique, et qui ont eu des problèmes avec les solutions ci-dessus (comme "Le format de la chaîne d'initialisation n'est pas conforme aux spécifications commençant à l'index 0.") lors de la configuration de la chaîne de connexion dans le constructeur. Voici comment y remédier:
la source
d' ici
notez que vous devrez peut-être ajouter
Microsoft.EntityFrameworkCore.SqlServer
la source