Entity Framework - 根据子域设置数据库
Entity Framework - Set DB based on sub-domain
我正在寻找使用 entity framework 基于子域设置数据库的最佳方法。
- 使用默认 EF 进程连接到 Master DB
- 读取当前请求的子域名
- 访问Master DB读取子域
的连接字符串
- 设置 EF 上下文以使用 子域
的数据库
- 所有 EF 连接现在都应使用 子域 DB
我对主数据库上的迁移不感兴趣,但我确实希望它在子域上运行。
这是迄今为止我发现的最好的方法,但我想知道是否有更精简的方法:https://www.reddit.com/r/dotnet/comments/2t2xlz/entity_framework_multiple_database_single/
您将必须执行以下步骤
创建一个始终查找元数据以获取上下文连接字符串的连接解析器
在您的数据库上下文中,您必须将在 (1) 中获得的连接字符串作为您的实体连接传递
这样,您始终拥有基于域的连接字符串。
HTH
我最终执行了以下操作,它适用于迁移和所有操作:
- 创建主数据库上下文、配置和迁移。
- 创建子域数据库上下文、配置和迁移。
- 在 Application_Start 迁移并初始化 master 数据库。
- 遍历 master 数据库中的每个子域并调用 migrate
并初始化。
- On Application_BeginRequest 获取当前子域并设置一个
带有子域名的上下文项。
- 现在是主要部分:在您的子域数据库上下文中,初始化
具有将从中获取连接字符串的方法的构造函数
基于上下文中设置的子域名的主数据库
项目。
请记住,您只能在发送请求时获取子域,而不能在开始请求之前获取。在调用 Application_BeginRequest 之前对子域上下文的任何调用都将导致错误。
对于将依赖项注入存储库,您可以设置传递的正确上下文,以便它知道使用主域上下文或子域上下文。
我正在寻找使用 entity framework 基于子域设置数据库的最佳方法。
- 使用默认 EF 进程连接到 Master DB
- 读取当前请求的子域名
- 访问Master DB读取子域 的连接字符串
- 设置 EF 上下文以使用 子域 的数据库
- 所有 EF 连接现在都应使用 子域 DB
我对主数据库上的迁移不感兴趣,但我确实希望它在子域上运行。
这是迄今为止我发现的最好的方法,但我想知道是否有更精简的方法:https://www.reddit.com/r/dotnet/comments/2t2xlz/entity_framework_multiple_database_single/
您将必须执行以下步骤
创建一个始终查找元数据以获取上下文连接字符串的连接解析器
在您的数据库上下文中,您必须将在 (1) 中获得的连接字符串作为您的实体连接传递
这样,您始终拥有基于域的连接字符串。
HTH
我最终执行了以下操作,它适用于迁移和所有操作:
- 创建主数据库上下文、配置和迁移。
- 创建子域数据库上下文、配置和迁移。
- 在 Application_Start 迁移并初始化 master 数据库。
- 遍历 master 数据库中的每个子域并调用 migrate 并初始化。
- On Application_BeginRequest 获取当前子域并设置一个 带有子域名的上下文项。
- 现在是主要部分:在您的子域数据库上下文中,初始化 具有将从中获取连接字符串的方法的构造函数 基于上下文中设置的子域名的主数据库 项目。
请记住,您只能在发送请求时获取子域,而不能在开始请求之前获取。在调用 Application_BeginRequest 之前对子域上下文的任何调用都将导致错误。
对于将依赖项注入存储库,您可以设置传递的正确上下文,以便它知道使用主域上下文或子域上下文。