Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
C# 如何在控制器中使用多个DBContext_C#_Entity Framework_Asp.net Core_Asp.net Core 3.1_Dbcontext - Fatal编程技术网

C# 如何在控制器中使用多个DBContext

C# 如何在控制器中使用多个DBContext,c#,entity-framework,asp.net-core,asp.net-core-3.1,dbcontext,C#,Entity Framework,Asp.net Core,Asp.net Core 3.1,Dbcontext,如何在一个控制器中使用多个DBContext,我试图以不同的方式重载构造函数 某些控制器: public C1(DBContext1 a, DBContext2 b, DBContext3 c) { } //public C1(DBContext1 a) //{ //} //public C1(DBContext2 b) //{ //} //public C1(DBContext3 c) //{ //} StartUp.cs: services.AddDbContext&

如何在一个控制器中使用多个DBContext,我试图以不同的方式重载构造函数

某些控制器:

public C1(DBContext1 a, DBContext2 b, DBContext3 c)
{ 
}
 //public C1(DBContext1 a)
 //{ 
 //}
 //public C1(DBContext2 b)
 //{
 //}
 //public C1(DBContext3 c)
 //{
 //}
StartUp.cs:

services.AddDbContext<DBContext1>(options =>
options.UseSqlServer(new string(K.ConnectionString))
);

services.AddDbContext<DBContext2>(options =>
options.UseSqlServer(new string(K.ConnectionString))
);

services.AddDbContext<DBContext3>(options =>
options.UseSqlServer(new string(K.ConnectionString))
);
  • 创建数据库上下文
  • 公共类DBContext\u A:DBContext
    {
    公共DBContext_A(DbContextOptions选项):基本(选项)
    {
    }
    }
    公共类DBContext_B:DBContext
    {
    公共DBContext_B(DbContextOptions选项):基本(选项)
    {
    }
    }
    公共类DBContext_C:DBContext
    {
    公共DBContext_C(DbContextOptions选项):基本(选项)
    {
    }
    }
    
  • 为每个DBContext定义一个连接字符串:
  • {
    “连接字符串”:{
    “连接A”:“服务器=(localdb)\\mssqllocaldb;数据库=数据库A;可信连接=真;…”,
    “连接B”:“服务器=(localdb)\\mssqllocaldb;数据库=数据库B;受信任的连接=真;…”,
    “连接\u C”:“服务器=(localdb)\\mssqllocaldb;数据库=DB\u C;受信任的\u连接=True;…”,
    }
    }
    
  • 在启动时注册:
  • services.AddDbContext(ops=>
    {
    ops.UseSqlServer(Configuration.GetConnectionString($“Connection_A”));
    });
    services.AddDbContext(ops=>
    {
    ops.UseSqlServer(Configuration.GetConnectionString($“Connection_B”));
    });
    services.AddDbContext(ops=>
    {
    ops.UseSqlServer(Configuration.GetConnectionString($“Connection_C”);
    });
    
  • 注入控制器:
  • 公共控制器:控制器
    {
    私有只读DBContext_A_context_A;
    私有只读DBContext_B_context_B;
    私有只读DBContext_C_context_C;
    公共食品控制员(
    DBContext_A context_A,
    DBContext_B context_B,
    DBContext_C context_C)
    {
    _上下文A=上下文A;
    _context_B=context_B;
    _context_C=context_C;
    }
    }
    
    代码优先方法的其他最佳实践: 为每个上下文创建一个类库,以便在应用迁移时,每个上下文在其自己的项目中都有自己的迁移文件夹

    • 解决方案
      • 主要项目
        • startup.cs
      • 类库
        • DbContext_A.cs
        • 迁移//文件夹
      • 类库
        • DbContext_B.cs
        • 迁移//文件夹
      • 类库
        • DbContext_C.cs
        • 迁移//文件夹
    在多上下文解决方案中应用迁移时

    • 在解决方案资源管理器中,将主项目(带startup.cs)设置为“startup project”
    • 从PackageManager控制台将相关类库A、B或C设置为“默认项目”
    • 将目标上下文添加到每个cmd,如下所示:
    或者,您可以使用完整的PM cmd,如下所示:

    PM > add-migration Init -Context DBContext_A -Project ClassLibrary_A -StartupProject MainProject
    PM > update-database -Context DBContext_A -Project ClassLibrary_A -StartupProject MainProject
    
    PM > add-migration Init -Context DBContext_B -Project ClassLibrary_B -StartupProject MainProject
    PM > update-database -Context DBContext_B -Project ClassLibrary_B -StartupProject MainProject
    
    PM > add-migration Init -Context DBContext_C -Project ClassLibrary_C -StartupProject MainProject
    PM > update-database -Context DBContext_C -Project ClassLibrary_C -StartupProject MainProject
    

    这对你有帮助吗?为什么这还不起作用?显示屏幕截图,说明问题/如何知道存在问题。向我们展示创建控制器的任何代码(它不应该;DI应该这样做)。向我们展示控制器DI注册。向构造函数显示参数的值。告诉我们任何错误信息请参见以下内容:@all updated my post您需要使用
    DbContextOptions
    DbContextOptions
    。。。而不仅仅是
    DbContextOptions
    (在构造函数中)。
    PM > add-migration Init -Context DBContext_A
    PM > update-database -Context DBContext_A
    
    PM > add-migration Init -Context DBContext_B
    PM > update-database -Context DBContext_B
    
    PM > add-migration Init -Context DBContext_C
    PM > update-database -Context DBContext_C
    
    PM > add-migration Init -Context DBContext_A -Project ClassLibrary_A -StartupProject MainProject
    PM > update-database -Context DBContext_A -Project ClassLibrary_A -StartupProject MainProject
    
    PM > add-migration Init -Context DBContext_B -Project ClassLibrary_B -StartupProject MainProject
    PM > update-database -Context DBContext_B -Project ClassLibrary_B -StartupProject MainProject
    
    PM > add-migration Init -Context DBContext_C -Project ClassLibrary_C -StartupProject MainProject
    PM > update-database -Context DBContext_C -Project ClassLibrary_C -StartupProject MainProject