为多租户web应用程序上的每个数据库初始化实体框架

本文关键字:数据库 初始化 框架 实体 程序上 web 应用程序 应用 | 更新日期: 2023-09-27 18:04:47

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

在web应用程序的启动类(IProcessHostPreloadClient的实现)中,我想初始化实体框架-我需要循环并为每个配置的租户创建数据上下文的新实例。做这件事最好的办法是什么?StructureMap将返回与http/线程作用域设置缓存相同的数据上下文。

谢谢,Harsha

为多租户web应用程序上的每个数据库初始化实体框架

如果您只是想根据租户更改连接字符串,则应该执行以下操作:

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

Tenant类应该保留当前的租户连接字符串名称,而TenantFactory将使用用于确定连接字符串的任何方法创建适当的Tenant

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