我在我的应用程序中使用了多个DbContext
(有界DbContext
)。所以我有以下代码:
public class EfUnitOfWork<TContext> : IUnitOfWork where TContext : BaseDbContext, new()
{
...
}
//*******************************Module1**************************************
public interface IModule1UnitOfWork:IUnitOfWork
{
}
public class Module1EfUnitOfWork : EfUnitOfWork<Module1DbContext>,IModule1UnitOfWork
{
public Module1EfUnitOfWork ()
: base(new Module1DbContext())
{
}
}
public class Module1DbContext: BaseDbContext
{
static Module1DbContext()
{
Database.SetInitializer<Module1DbContext>(null);
}
public Module1DbContext()
: base("name=MyDatabase")
{
}
}
//*******************************Module2**************************************
public interface IModule2UnitOfWork:IUnitOfWork
{
}
public class Module2EfUnitOfWork : EfUnitOfWork<Module2DbContext>,IModule2UnitOfWork
{
public Module2DbContext()
: base(new PlanningDbContext())
{
}
}
public class Module2DbContext: BaseDbContext
{
static Module2DbContext()
{
Database.SetInitializer<Module2DbContext>(null);
}
public Module1DbContext()
: base("name=MyDatabase")
{
}
}
我也使用StructureMap 3
作为我的IoC container
并使用以下代码:
ObjectFactory.Configure(x =>x.For(typeof(IModule1UnitOfWork))
.Use(typeof(Module1EfUnitOfWork))
.SetLifecycleTo((Lifecycles.Singleton));
x.For(typeof(IUnitOfWork))
.Use(typeof(Module1EfUnitOfWork))
.SetLifecycleTo((Lifecycles.Singleton)));
ObjectFactory.Configure(x =>x.For(typeof(IModule2UnitOfWork))
.Use(typeof(Module2EfUnitOfWork))
.SetLifecycleTo((Lifecycles.Singleton));
x.For(typeof(IUnitOfWork))
.Use(typeof(Module2EfUnitOfWork))
.SetLifecycleTo((Lifecycles.Singleton)));
它运行正常,但是当我想将这些代码用于Integration Test
时,我遇到了一个问题。
我想对Sql Server CE
使用Integration Test
,因此我必须将我的测试ConnectionString
(指定Sql Server CE
数据库文件)传递给模块&#39 ; s DbContext
s,我使用我的模块DbContexts
作为EfUnitOfWork<>
类中的通用参数,因此它应该具有无参数构造函数,但正如您所见,我使用了我的模块&# 39;用于指定我的数据库的DbContext无参数构造函数:
public Module1DbContext()
: base("name=MyDatabase");
并且无法传递任何东西。
那么,我怎样才能将现有的DbContext
用于Integration Test
?
答案 0 :(得分:0)
&#34;名称=&#34;仅指定连接字符串,因此它是从app.config文件中读取的间接参数。
所以imho,你应该为你的测试使用不同的app.config。