2013-03-29 1 views
6

J'ai donc utilisé Entity Framework pendant un certain temps (sur v5 pour mon projet principal). Une question que j'ai toujours eue mais que je n'ai jamais trouvée de réponse définitive: le nom de ma chaîne de connexion doit-il correspondre au nom de mon DbContext pour qu'EF fonctionne correctement?Nom de la chaîne de connexion et Entité Framework

Il semble (et je n'ai jamais rien fait différemment), mais je préfèrerais ne pas avoir à fournir une "chaîne magique" dans mon Web.config pour qu'EF fonctionne. À mon avis, il serait préférable de garder DefaultConnection comme nom et EF se connecte d'une autre façon.

Voici les références de mon web.config (certains noms ont changé):

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

... et ... plus bas ...

<entityFramework> 
    <contexts> 
     <context type="MyProject.Path.To.MyContext, MyProject.Path.To, Version=1.0.0.0, Culture=neutral"> 
     <databaseInitializer type="MyProject.Path.To.MyInitializer, MyProject" /> 
     </context> 
    </contexts> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
</entityFramework> 

Toute idée serait appréciée .

+0

C'est la convention par défaut, à utiliser la chaîne de connexion portant le même nom que votre classe 'DbContext'. – jrummell

Répondre

11

Une question que j'ai toujours eu, mais je ne pouvais jamais trouver une réponse à définitive - ce que le nom de ma chaîne de connexion doivent correspondre au nom de mon DbContext pour que EF fonctionne correctement?

Non, vous pouvez passer un nom de chaîne de connexion dans le constructeur de base pour DbContext, à savoir

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("MyConnectionStringName") 
    { 

    } 
} 

Il y a aussi un constructeur sur DbContext qui prend un argument DbConnection si vous préférez créer la connexion vous.

Enfin, vous pouvez fournir votre propre implémentation de IDbConnectionFactory et l'utiliser à la place du LocalDbConnectionFactory par défaut spécifié dans le app.config. Vous modifiez dans la config ou vous définissez lors de l'exécution comme suit:

Database.DefaultConnectionFactory = new MyCustomConnectionFactory();

Questions connexes