Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架-基于子域的集合数据库_Entity Framework_Asp.net Mvc 5_Multi Tenant - Fatal编程技术网

Entity framework 实体框架-基于子域的集合数据库

Entity framework 实体框架-基于子域的集合数据库,entity-framework,asp.net-mvc-5,multi-tenant,Entity Framework,Asp.net Mvc 5,Multi Tenant,我正在寻找使用实体框架基于子域设置数据库的最佳方法 使用默认EF进程连接到主数据库 读取当前请求的子域 访问主数据库读取子域的连接字符串 设置EF上下文以使用子域的DB 所有EF连接现在都应该使用子域 我对主数据库上的迁移不感兴趣,但我希望它在子域上工作 这是到目前为止我发现的最好的方法,但我想知道是否有一种更为简化的方法:您必须执行以下步骤 创建一个总是查找元数据以获取上下文连接字符串的连接解析器 在db上下文中,必须将(1)中获得的连接字符串作为实体连接传递 这样,您就始终拥有基于域的连接字

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

  • 使用默认EF进程连接到主数据库
  • 读取当前请求的子域
  • 访问主数据库读取子域的连接字符串
  • 设置EF上下文以使用子域的DB
  • 所有EF连接现在都应该使用子域
  • 我对主数据库上的迁移不感兴趣,但我希望它在子域上工作


    这是到目前为止我发现的最好的方法,但我想知道是否有一种更为简化的方法:

    您必须执行以下步骤

  • 创建一个总是查找元数据以获取上下文连接字符串的连接解析器

  • 在db上下文中,必须将(1)中获得的连接字符串作为实体连接传递

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


    HTH

    我最后做了以下工作,它可以用于迁移和所有操作:

    • 创建主数据库上下文、配置和迁移
    • 创建子域数据库上下文、配置和迁移
    • 在应用程序启动时,迁移并初始化主数据库
    • 循环主数据库中的每个子域并调用migrate 并初始化
    • 在应用程序上,获取当前子域并设置 具有子域名的上下文项
    • 现在是主要部分:在子域数据库上下文中,初始化 构造函数,其方法将从中获取连接字符串 基于上下文中设置的子域名的主数据库 项目
    请记住,只有在发送请求时才能获取子域,而不是在开始请求之前。在调用应用程序_BeginRequest之前对子域上下文的任何调用都将导致错误


    为了将依赖项注入存储库,可以设置要传递的正确上下文,这样它就知道是使用主上下文还是子域上下文。

    您使用ASP.NET还是MVC?在哪里可以找到解决方案?@DawoodAwan还没有-我正在尝试使用2 DB上下文,并从第二个上下文访问主上下文。完成时/如果完成,我将更新。@DawoodAwan-请阅读下面的答案,谢谢,您在应用程序\u beginrequest中使用redis缓存存储范围子域?