0

我们正在开发一个多租户的 ASP.NET MVC Web 应用程序。每个租户都有自己的数据库。数据访问由实体框架管理。StructureMap 被用作 IoC 容器。实体框架数据上下文已设置为 http 请求范围。对于每个请求,都会计算出租户,并且 StructureMap 返回实体框架数据上下文和存储库类的新实例。

在 Web 应用程序的启动类(IProcessHostPreloadClient 的实现)中,我想初始化实体框架 - 我需要循环并为每个配置的租户创建一个新的数据上下文实例。解决这个问题的最佳方法是什么?StructureMap 将返回相同的数据上下文,因为它已设置为使用 http/thread 范围进行缓存。

谢谢,哈沙

4

1 回答 1

1

如果您只想根据租户改变连接字符串,以下应该可以工作:

For<Tenant>().Use(c => c.GetInstance<TenantFactory>().CreateTenant());
For<DbContext>().Use(c => new DbContext(
    ConfigurationManager.ConnectionStrings[c.GetInstance<Tenant>().ConnectionName]
        .ConnectionString));

该类Tenant应保存当前租户连接字符串名称,并且TenantFactory将创建适当的Tenant取消调用您用于确定连接字符串的任何方法。

如果它是一个更广泛的变化,多容器方法可能会更好。

于 2013-03-23T20:57:10.780 回答