使用存储库和Unity的Asp.Net MVC 3中MySlaveContext的动态ConnectionString

时间:2011-09-14 15:35:07

标签: .net asp.net-mvc entity-framework asp.net-mvc-3 entity-framework-4

我的数据库结构(域,数据和服务)与:This application (MyFinance on CodePlex)

相同

问题是,我有2个数据库上下文(1个MyMasterContext)和1个MySlaveContext。

并假设MySlaveContext始终可以是不同的数据库/ providerName / server。 (我知道实体框架仅支持EF 4.1中的MS SQL Server) MyMasterContext始终保持不变,这是保存所有自定义连接字符串的地方。

因此,当我处理MySlaveContext时,我的connectionstring总是会改变,具体取决于登录的用户。

在当前情况下,MyMasterContext在使用时总是自动生成,MySlaveContext也是如此。

现在我必须添加“dynamic connectionstring”支持,唯一的问题是,我不知道在哪里添加此功能......

我已经在UserIdentity(UserData)中实现了ConnectionString,因此在执行时始终可用:

 DirectCast(User.Identity,MyCustomUserIdentity).ConnectionString

与ProviderName相同。

另外,我的DataBaseFactory和UnitOfWork是“重复的”,因为我有一个用于Master,一个用于Slave(只是为了确定)。

有人可以帮助我如何添加“ConnectionString-detection”支持吗?

我以为我可以在Unity中将它添加为PropertyInjection或ParameterInjection,但我在这个领域没有足够的经验来知道它是正确的或如何做到这一点:)

提前感谢任何可以让我走上正确轨道的人:)

1 个答案:

答案 0 :(得分:0)

使用InjuctionConstructor自行修复它。

在global.asax

 GetUnityContainer.RegisterType(GetType(ISlaveConnectionString), GetType(SlaveConnectionString), New HttpContextLifetimeManager(Of ISlaveConnectionString), New InjectionConstructor(IIf(HttpContext.Current.User IsNot Nothing, DirectCast(HttpContext.Current.User, UserIdentity).ConnectionString, "")))

这是一个可以提供给方法的参数。在这种情况下,我正在更新我的ConnectionString。