我有一个正常的项目,在app.config中很好地配置了连接。我有一个测试项目,连接也很好地配置。一切都很完美。
但是当我想在代码中切换连接时,似乎没有任何工作。它似乎完全忽略了我在构造函数中传递的连接字符串,并且它继续使用默认连接(由配置指定的匹配db上下文的类名。
我在测试项目中的配置:
<!-- Connection string -->
<connectionStrings>
<add name="MyApplication.Database.MyContext" connectionString="Data Source=(LocalDb)\v11.0;AttachDBFilename=C:\DB\Test1.mdf" providerName="System.Data.SqlClient" />
<add name="TestEntities" connectionString="Data Source=(LocalDb)\v11.0;AttachDBFilename=C:\DB\Test2.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>
我的(仍然)小测试:
using (var db = new MyContext(@"name=TestEntities"))
{
db.Database.Initialize(true);
}
这样做是在C:\ DB \ Test1.mdf而不是C:\ DB \ Test2.mdf创建一个新数据库。这很奇怪,因为如果删除连接字符串,我会收到一个无法找到的错误。如果我调试测试,我甚至可以在连接对象中看到正确的连接字符串。
我不知道我在这里做错了什么。
什么有效(但有点奇怪/丑陋),是我的DatabaseContext的子类,所以它得到一个新的名字。
P.S。这是我的整个app.config文件(在测试项目中):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<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>
<!-- Connection string -->
<connectionStrings>
<add name="MyApplication.Database.MyContext" connectionString="Data Source=(LocalDb)\v11.0;AttachDBFilename=C:\DB\Test1.mdf" providerName="System.Data.SqlClient" />
<add name="TestEntities" connectionString="Data Source=(LocalDb)\v11.0;AttachDBFilename=C:\DB\Test2.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
答案 0 :(得分:1)
在整个app.config中。 TestEntities连接字符串不存在。检查&#39; + TestEntities&#39;在配置
编辑:
此外,如果上下文类名称具有在配置中定义的具有相同名称的连接字符串 - 这将优先。手动连接字符串定义将被忽略。
答案 1 :(得分:0)
没有更多的代码,我只能猜测,但我怀疑你错过了对基类构造函数的调用。它应该是这样的:
public class MyContext : DbContext
{
public MyContext(string connectionString) : base(connectionString) { }
}