Asp.net mvc 4 EF DbContext中的多个字符串连接

Asp.net mvc 4 EF DbContext中的多个字符串连接,asp.net-mvc-4,repository-pattern,code-first,entity-framework-5,unit-of-work,Asp.net Mvc 4,Repository Pattern,Code First,Entity Framework 5,Unit Of Work,我正在开发一个基于codeplex EFMVC解决方案的MVC网站,我正在使用实体框架和存储库、工作单元和命令模式。我的网站需要是一个SaaS解决方案(软件即服务)多数据库。 在我的旧版Asp.NETWebForms中,我有一个XML文件,其中包含所有不同的字符串连接,我尝试使用相同的策略。因此,在我的LoginController中,我创建了一个命令,该命令包含公司(用于标识将连接到哪个数据库)用户名和密码。在域项目中的Validate()方法中,我正在读取XML以获得基于公司字段的正确字符串

我正在开发一个基于codeplex EFMVC解决方案的MVC网站,我正在使用实体框架和存储库、工作单元和命令模式。我的网站需要是一个SaaS解决方案(软件即服务)多数据库。 在我的旧版Asp.NETWebForms中,我有一个XML文件,其中包含所有不同的字符串连接,我尝试使用相同的策略。因此,在我的LoginController中,我创建了一个命令,该命令包含公司(用于标识将连接到哪个数据库)用户名和密码。在域项目中的Validate()方法中,我正在读取XML以获得基于公司字段的正确字符串连接。我的问题是如何设置DatabaseFactory或DbContext以使用此选定的连接字符串?它应该在构造函数中注入吗?有没有建议以正确的方式做到这一点,而不“违反规则”

注意,我使用AutoFac进行依赖项注入

谢谢你的关注

致以最良好的祝愿


Luiz Fernando Vall Dionizio

您可以使用Autofaq的ResolveNamed功能为同一界面获得不同的注册 例如:

 builder.Register<IDataContext>(x => new DataContext(connectionStringOne))
          .Named<IDataContext>("CS1");

 builder.Register<IDataContext>(x => new DataContext(connectionStringTwo))
          .Named<IDataContext>("CS2");
builder.Register(x=>newdatacontext(connectionStringOne))
.命名为(“CS1”);
注册器(x=>newdatacontext(connectionStringTwo))
.命名为(“CS2”);
并解决它

var context = ContainerAccessor.Container().ResolveNamed<IDataContext>("CS1"); 
var context=ContainerAccessor.Container().ResolveNamed(“CS1”);
另一种方法是重写DataContext构造函数,并从该请求的共享位置读取配置