C# 如何在控制器中使用多个DBContext
如何在一个控制器中使用多个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&
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选项):基本(选项)
{
}
}
{
“连接字符串”:{
“连接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 > 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