Entity Framework - 根据子域设置数据库

Entity Framework - Set DB based on sub-domain

我正在寻找使用 entity framework 基于子域设置数据库的最佳方法。

  1. 使用默认 EF 进程连接到 Master DB
  2. 读取当前请求的子域名
  3. 访问Master DB读取子域
  4. 的连接字符串
  5. 设置 EF 上下文以使用 子域
  6. 的数据库
  7. 所有 EF 连接现在都应使用 子域 DB

我对主数据库上的迁移不感兴趣,但我确实希望它在子域上运行。

这是迄今为止我发现的最好的方法,但我想知道是否有更精简的方法:https://www.reddit.com/r/dotnet/comments/2t2xlz/entity_framework_multiple_database_single/

您将必须执行以下步骤

  1. 创建一个始终查找元数据以获取上下文连接字符串的连接解析器

  2. 在您的数据库上下文中,您必须将在 (1) 中获得的连接字符串作为您的实体连接传递

这样,您始终拥有基于域的连接字符串。

HTH

我最终执行了以下操作,它适用于迁移和所有操作:

  • 创建主数据库上下文、配置和迁移。
  • 创建子域数据库上下文、配置和迁移。
  • 在 Application_Start 迁移并初始化 master 数据库。
  • 遍历 master 数据库中的每个子域并调用 migrate 并初始化。
  • On Application_BeginRequest 获取当前子域并设置一个 带有子域名的上下文项。
  • 现在是主要部分:在您的子域数据库上下文中,初始化 具有将从中获取连接字符串的方法的构造函数 基于上下文中设置的子域名的主数据库 项目。

请记住,您只能在发送请求时获取子域,而不能在开始请求之前获取。在调用 Application_BeginRequest 之前对子域上下文的任何调用都将导致错误。

对于将依赖项注入存储库,您可以设置传递的正确上下文,以便它知道使用主域上下文或子域上下文。