2014-05-12 173 views
3

我使用EF 6.1 Code First。我在编程一样运行配置连接字符串:实体框架提供程序配置

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

这工作得很好,但只有当我保留一些锅炉板连接信息在我的应用程序/ web.config中:

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

我怀疑这是因为我没有提供提供者信息。我指定供应商和defaultConnectionFactory段(SQL服务器/ LocalDbConnectionFactory),但它似乎并不关心:

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

如果我删除连接字符串部分,它会尝试连接到那并不是一个MDF文件牛逼存在:

System.Data.SqlClient.SqlException:无法附加文件 'C:\我的 项目\ App_Data文件\ MyDb.mdf' 数据库MYDB。

通常情况下,localdb连接字符串会生成到c:\ users \ my_user \ MyDb.mdf的路径。所以它似乎不使用LocalDb工厂,除非我的.config文件中有连接字符串部分。

如何在每个上下文基础上指定EF从该连接字符串节点获取的providerName信息?或者我在这里咆哮错误的树?

回答

2

这可能与您构建连接的方式有关。如果您使用的DataContext的默认构造函数,那么它会尝试从配置文件中找到你的连接字符串:

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

如果您通过在连接字符串中的构造函数,那么你不应该需要的配置文件条目:

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

希望这有助于。

+0

这是正确的。我很抱歉没有确认这一点。如果你愿意,我可以创建另一个赏金问题并以这种方式奖励积分。 – RMD

+0

嗨RMD,那太棒了。很高兴它解决了你的问题。 – blorkfish

相关问题