在一个 DBContext 中处理多个模式

The*_*One 8 c# entity-framework ef-code-first asp.net-core-2.0

我正在将现有数据库与新的 ASP.Net Core 2.0 应用程序一起使用。该数据库有两个模式,dbo 和 notinapplication。我不想创建 notinapplication 模式表的模型。所以我在包管理器中使用以下代码并且它工作正常。

Scaffold-DbContext "Server=localhost; Database=TestServer; Trusted_Connection=True; 
MultipleActiveResultSets=true;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
-UseDatabaseNames -Force -Context "DbContext" -Schema "dbo"
Run Code Online (Sandbox Code Playgroud)

这样我只从 DbContext 中的 dbo 获取表,而 notinapplication 模式表被忽略。

但是现在我有一个名为 user 的新模式,它需要成为模型的一部分。

Scaffold-DbContext "Server=localhost; Database=TestServer; Trusted_Connection=True; 
MultipleActiveResultSets=true;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
-UseDatabaseNames -Force -Context "DbContext" -Schema "user"
Run Code Online (Sandbox Code Playgroud)

但是使用上面的代码消除了 dbo 模式中的表。在忽略 notinapplication 模式的同时,在 DBContext 中拥有两种模式的表有什么选择。

如果我确实必须创建不同的上下文,是否可以在一个查询中从多个数据库上下文进行查询?

The*_*der 10

提供多个值所需要做的就是使用“数组语法”。

-Schema "schema1","schema2","schema3"
Run Code Online (Sandbox Code Playgroud)

在你的情况下,你必须做

Scaffold-DbContext "Server=localhost; Database=TestServer; Trusted_Connection=True; 
MultipleActiveResultSets=true;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
-UseDatabaseNames -Force -Context "DbContext" -Schema "dbo","user"
Run Code Online (Sandbox Code Playgroud)

  • 迁移到 **dotnet-ef v.6** 后,我必须用 `--schema "schema1" --schema "schema2"` 替换 `--schema "schema1","schema2"` (以前的版本可以正常使用) dotnet-ef v.5) (3认同)