Entity framework 如何让Entity Framework在单元测试项目中读取我的app.config文件
我正在尝试为我的实体框架测试创建一个数据库,但我无法让它正确读取我的配置文件。测试项目中我的Entity framework 如何让Entity Framework在单元测试项目中读取我的app.config文件,entity-framework,Entity Framework,我正在尝试为我的实体框架测试创建一个数据库,但我无法让它正确读取我的配置文件。测试项目中我的app.config文件如下所示: <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <sect
app.config
文件如下所示:
<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=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="TestConnection"
connectionString= "Data Source=(LocalDb)\v11.0;
Initial Catalog=LocabalTestDB;
Integrated Security=SSPI;
MultipleActiveResultSets=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
....
</configuration>
public class TestDBSeeder : DropCreateDatabaseIfModelChanges<LocabalSqlContext>
{
protected override void Seed(LocabalSqlContext context)
{
Locabal.Model.Migrations.Configuration.SeedData(context);
base.Seed(context);
}
}
[TestClass]
public class LocabalSqlContextIntegrationBaseTest
{
protected TransactionScope Transaction { get; set; }
[AssemblyInitialize]
public static void Init(TestContext c)
{
Database.SetInitializer<LocabalSqlContext>(new TestDBSeeder());
if (!Database.Exists("LocabalSqlContext"))
{
using (var db = new LocabalSqlContext())
{
db.Database.Initialize(true);
}
}
}
[TestInitialize]
public virtual void StartDbTransaction()
{
Transaction = new TransactionScope();
}
[TestCleanup]
public virtual void EndDbTransaction()
{
Transaction.Dispose();
}
}
因此,您必须将连接字符串中的名称设置为DbContext
的名称,然后“Initial Catalog”参数将是您的DB名称。例如:
<connectionStrings>
<add name="LocabalSqlContext"
connectionString= "Data Source=(LocalDb)\v11.0;
Initial Catalog=LocabalTestDB;
Integrated Security=SSPI;
MultipleActiveResultSets=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
然后您可以如下设置测试类:
<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=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="TestConnection"
connectionString= "Data Source=(LocalDb)\v11.0;
Initial Catalog=LocabalTestDB;
Integrated Security=SSPI;
MultipleActiveResultSets=true"
providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
....
</configuration>
public class TestDBSeeder : DropCreateDatabaseIfModelChanges<LocabalSqlContext>
{
protected override void Seed(LocabalSqlContext context)
{
Locabal.Model.Migrations.Configuration.SeedData(context);
base.Seed(context);
}
}
[TestClass]
public class LocabalSqlContextIntegrationBaseTest
{
protected TransactionScope Transaction { get; set; }
[AssemblyInitialize]
public static void Init(TestContext c)
{
Database.SetInitializer<LocabalSqlContext>(new TestDBSeeder());
if (!Database.Exists("LocabalSqlContext"))
{
using (var db = new LocabalSqlContext())
{
db.Database.Initialize(true);
}
}
}
[TestInitialize]
public virtual void StartDbTransaction()
{
Transaction = new TransactionScope();
}
[TestCleanup]
public virtual void EndDbTransaction()
{
Transaction.Dispose();
}
}
公共类testdbeeder:DropCreateDatabaseIfModelChanges
{
受保护的覆盖无效种子(LocabalSqlContext上下文)
{
Locabal.Model.Migrations.Configuration.SeedData(上下文);
种子(上下文);
}
}
[测试类]
公共类LocabalSqlContextIntegrationBaseTest
{
受保护的TransactionScope事务{get;set;}
[汇编初始化]
公共静态void Init(TestContext c)
{
SetInitializer(新testdbeeder());
如果(!Database.Exists(“LocabalSqlContext”))
{
使用(var db=new LocabalSqlContext())
{
db.Database.Initialize(true);
}
}
}
[测试初始化]
公共虚拟空间StartDbTransaction()
{
Transaction=新TransactionScope();
}
[测试清理]
公共虚拟无效EndDbTransaction()
{
Transaction.Dispose();
}
}
此app.config是否在测试项目中?