2014-05-12 3 views
3

J'utilise EF 6.1 Code First. Je configuration par programme la chaîne de connexion à l'exécution comme:Configuration du fournisseur de framework d'entité

myContext.Database.Connection.ConnectionString = "Data Source=(localdb)\v11.0;Initial Catalog=MyDb;Integrated Security=True;" 

Cela fonctionne bien, mais seulement si je garde certaines informations de connexion de plaque de la chaudière dans mon app/web.config:

<connectionStrings> 
    <add name="MyDb" connectionString="Data Source=NOTUSED;Initial Catalog=NOTUSED;" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

Je soupçonne C'est parce que je ne fournis pas l'information du fournisseur. Je spécifie le fournisseur et sections defaultConnectionFactory (SQL Server/LocalDbConnectionFactory), mais il ne semble pas se soucier:

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 

Si je supprime la section chaînes de connexion, il tente de se connecter à un fichier mdf qui n » t existe:

System.Data.SqlClient.SqlException: Impossible de joindre le fichier 'C: \ Mon projet \ App_Data \ MyDb.mdf' comme base de données MyDb.

Normalement, la chaîne de connexion localdb génère un chemin vers c: \ users \ my_user \ MyDb.mdf. Il semble donc qu'il n'utilise pas l'usine LocalDb à moins d'avoir la section de chaîne de connexion dans mon fichier .config.

Comment est-ce que je peux spécifier - sur une base par contexte - les informations de providerName qu'EF obtient de ce noeud de chaîne de connexion? Ou est-ce que j'aboie le mauvais arbre ici?

Répondre

2

Cela peut être lié à la manière dont vous construisez votre connexion. Si vous utilisez le constructeur par défaut sur le DataContext, il tentera de trouver votre chaîne de connexion à partir du fichier de configuration:

MyDbContext myContext = new MyDbContext() <- this uses the default constructor 
myContext.Database.Connection.ConnectionString = "_conn_str_" 

Si vous passez la chaîne de connexion dans le constructeur, alors vous ne devriez pas besoin du fichier de configuration entrée:

using (MyDbContext myContext = new MyDbContext("_conn_str_")) { 
    // the above line should not need an entry in the config file 
} 

Espérons que cela aide.

+0

C'était correct. Je m'excuse de ne pas l'avoir confirmé plus tôt. Si vous le souhaitez, je peux créer une autre question de prime et attribuer des points de cette façon. – RMD

+0

Hey RMD, Ce serait génial. Content que cela ait réglé votre problème. – blorkfish

Questions connexes