实体框架 - 基于子域设置DB

时间:2015-04-17 13:13:57

标签: entity-framework asp.net-mvc-5 multi-tenant

我正在寻找使用实体框架基于子域设置数据库的最佳方法。

  1. 使用默认EF流程
  2. 连接到主数据库
  3. 读取当前请求的子域
  4. 访问主数据库以阅读子域的连接字符串
  5. 设置EF上下文以使用子域
  6. 的数据库
  7. 现在,所有EF连接都应使用子域 DB
  8. 我对主数据库上的迁移不感兴趣,但我确实希望它在子域上工作。

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

2 个答案:

答案 0 :(得分:1)

您必须执行以下步骤

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

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

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

    HTH

答案 1 :(得分:0)

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

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

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

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