我们正在尝试为 EF 项目使用存储库模式。允许用户选择三个独立(但结构相同)数据库之一登录(一个用于培训,一个用于测试,一个用于生产)。
我们目前正在使用 EF 4 实现,并通过 ADO.Net EntityObject Generator 生成了我们的 T4。我们的存储库基类如下所示:
public class RepositoryBase<C> : IDisposable
where C : ObjectContext, new()
{
private C _DataContext;
public virtual C DataContext
{
get
{
if (_DataContext == null)
{
_DataContext = new C();
}
return _DataContext;
}
}
//other code cut for brevity...
}
我认为我们想要的是能够修改“_DataConext = new C();” 行,以便它可以使用在运行时生成的连接字符串来指向正确的数据库。不幸的是,像这样传递连接字符串:_DataConext = new C(connectionString); 不允许并导致此消息:“不能将参数传递给类型参数上使用的‘新’。”
我可以在 model.tt 文件后面的代码中看到有三个构造函数:默认的无参数构造函数,一个具有 EntityConnection 参数的构造函数,以及第三个具有连接字符串参数的构造函数(我们要使用的那个)。
问题是我们如何去做这件事?任何帮助表示赞赏!