我们可以从现有数据库的选定表中构建 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
包管理器控制台(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
与 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
包管理器控制台(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