2013-03-29 65 views
6

所以我一直在使用实体框架一段时间(在我的主项目v5上)。我一直有一个问题,但永远找不到明确的答案 - 连接字符串的名称是否必须与我的DbContext的名称匹配才能正确工作?连接字符串名称和实体框架

看起来是这样(我从来没有做过什么不同),但我宁愿不必须提供在我的web.config“神奇字符串”为了EF工作。在我看来,更好的做法是将DefaultConnection作为名称并将EF连接起来。

这里是我的web.config(一些名字改)参考文献:

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

......然后......越往下......

<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> 

任何有识之士将不胜感激。

+0

这是默认的惯例,使用命名相同,您'DbContext'类的连接字符串。 – jrummell

回答

11

有一个问题我一直有,但永远无法找到一个明确的答案 对 - 不我的连接字符串的名称,还要为了EF正常工作符合我的DbContext的 名字?

号你可以通过一个连接字符串名称到基础构造函数的DbContext,即

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

    } 
} 

还有,如果你喜欢自己创建的连接,需要一个DbConnection参数上DbContext构造。

最后,您可以提供自己的实现IDbConnectionFactory并使用它代替app.config中指定的默认LocalDbConnectionFactory。你改变它在配置或者您在运行时进行如下设置:

Database.DefaultConnectionFactory = new MyCustomConnectionFactory();