我们可以从现有数据库的选定表中构建 DbContext 吗?

Can we Scaffold DbContext from selected tables of an existing database

与 Entity Framework 的先前版本一样,在 Entity Framework Core 中是否可以仅对现有数据库的选定表进行逆向工程以从中创建模型 类。 This official ASP.NET site reverse engineers the entire database. In past, as shown in this ASP.NET tutorial,如果您选择使用旧 EF,您只能对选定的 tables/Views 进行逆向工程。

可以使用dotnet ef dbcontext scaffold command with multiple -t (--table) parameters. It allows to specify all the tables, which needed by imported (scaffolded). The feature is described initially here.

解决问题

可以在构建数据库时指定模式中要使用的确切表,并忽略其余部分。下面的命令行示例显示了筛选表所需的参数。

.NET Core CLI:

dotnet ef dbcontext scaffold
          "server=localhost;port=3306;user=root;password=mypass;database=sakila" 
         MySql.Data.EntityFrameworkCore -o sakila
         -t actor -t film -t film_actor -t language -f  

Visual Studio 中的包管理器控制台:

Scaffold-DbContext "server=localhost;port=3306;user=root;password=mypass;database=sakila"
     MySql.Data.EntityFrameworkCore -OutputDir Sakila
     -Tables actor,film,film_actor,language -f   

Force tag will update the existing selected models/files in the output directory.

Scaffold-DbContext "Server=(localdb)\v11.0;Database=MyDB;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -t User, Role -f

.NET Core CLI:

dotnet ef dbcontext scaffold "server=localhost;port=3306;user=root;password=mypass;database=sakila" MySql.Data.EntityFrameworkCore -o sakila -t actor -t film -t film_actor -t language -f

Visual Studio 中的包管理器控制台:

Scaffold-DbContext "server=localhost;port=3306;user=root;password=mypass;database=sakila" MySql.Data.EntityFrameworkCore -OutputDir Sakila -Tables actor,film,film_actor,language -f

EF 核心,MS SQL 下午:

Scaffold-DbContext "server=PC\SQL2012;user=test;password=test123;database=student" Microsoft.EntityFrameworkCore.SqlServer -OutputDir student-Tables stu.names,stu.grades -f 

更多参考请访问entityframework-core-scaffold

包管理器控制台(MySql)

Scaffold-DbContext "server=localhost;port=3306;user=root;password=yourpassword;database=sakila" MySql.EntityFrameworkCore -OutputDir Models -Tables actor,film,film_actor,language -f

包管理器控制台 (MSSQL)

Scaffold-DbContext "Server=desktop-vd5sscb;Initial Catalog=databaseName;Integrated Security=True" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -f

包管理器控制台 (Sqlite)

Scaffold-DbContext "data source = yourdbname" Microsoft.EntityFrameworkCore.Sqlite -OutputDir Models -f

对于 Sqlite 默认的数据库目录是您的项目文件夹...控制器文件夹所在的位置

考虑到,如果您有 n 个表,最初在设计时,您的数据库设计架构应该将这些表分组到合适的模式中

例如:对于数据库“公司”,您可以有很多表,当您设计数据库时,将这些表分组为模式,例如:用户、产品 A、产品 B、产品 C 等

然后假设您只处理 ProductA 表,那么您可以简单地在 ProductA

另一个例子可能是假设您只在基于授权的项目上工作,并且您想要使用 ef 实现身份验证,那么您可以简单地搭建“用户”架构而不是产品并使您的 oAuth API 工作。

Scaffold-DbContext ...-Schemas 用户

这些只是您可以有效使用脚手架的几个用例。

参数 -Tables table1, table2, table3 对我来说适用于更多表。 -o 模型参数是创建生成模型的文件夹的输出。 -force 参数在每次启动时重新生成模型,例如更新数据库。 -Context DbE 参数重命名数据库上下文 class.

包管理器控制台

Scaffold-DbContext name=ConnectionStrings:DbE Microsoft.EntityFrameworkCore.SqlServer -o Model -force -Tables T_Users_Of_Chat -Context DbE