EF core 根据数据库生成模型 scaffold-dbcontext(转载)

 

 

scaffold-dbcontext 可以根据数据库生成ef上下文(mysql,sqlserver,sqlite)

这里只说重点怎么使用scaffold-dbcontext,只需三个步骤

1 在nuget包中引用两个包

Microsoft.EntityFrameworkCore.Tools

Microsoft.EntityFrameworkCore.SqlServer/ Pomelo.EntityFrameworkCore.Mysql /Microsoft.EntityFrameworkCore.Sqlite(根据数据库的不同选择自己的)

2使用命令生成(nuget管理控制台输入命令)

Scaffold-DbContext  "server=127.0.0.1;uid=user;pwd=pwd;database=databse;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models(mysql)

Scaffold-DbContext  "server=127.0.0.1;uid=user;pwd=pwd;database=databse;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models(sqlserver)

Scaffold-DbContext  "server=127.0.0.1;uid=user;pwd=pwd;database=databse;" Microsoft.EntityFrameworkCore.Sqlite -OutputDir Models(sqlite)

------------------------------------------------参考参数-----------------------------------------------------------------

1,普通的命令

Scaffold-DbContext "Server=.\SQL2012;Database=Test;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

2,force(覆盖),当Models文件夹下已有数据库实体类时使用。

Scaffold-DbContext "Server=.\SQL2012;Database=Test;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -force

3,指定生成某一个数据库表的实体类。

Scaffold-DbContext "Server=.\SQL2012;Database=Test;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -force -tables Role

------------------------------------------------参考参数-----------------------------------------------------------------

其中 Models 是将文件生成到指定的文件

3使用生成的上下文,可以实现简单的增删改查比如:

 

实际问题:如果上下文和实体类不在一个文件夹,怎么生成到多个文件夹(例如:Entity、Model)?

无法实现,因为都是相对路径。

官方文档:https://docs.microsoft.com/zh-cn/ef/core/cli/powershell

-OutputDir <String> 要在其中放置实体类文件的目录。 路径相对于项目目录。
-ContextDir <String> 要在其中放置 DbContext 文件的目录。 路径相对于项目目录。

 

--上下文和实体类只能创建到(默认)设为启动项的目录。
Scaffold-DbContext "Server=192.168.1.11;Database=HealthData;user id=sa;password=sa;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Health.Model\Entities -ContextDir Health.Repository\Database -Force
-- Model程序集设为启动项,则上下文和实体类全部创建到Model目录
Scaffold-DbContext "Server=192.168.1.11;Database=HealthData;user id=sa;password=sa;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Entities -ContextDir Database -Force

 

 1可以写一个测试项目,然后再有选择的复制粘贴。

2 把Entity、Model 合并到一个Model里面。

原本分层:Web、Service(接口类、Service)、Repository(接口类、上下文类、Repository)、Model(Dto、实体类)、Infrastructure。

或:Web、Service(接口类、Service)、Repository(接口类、Repository)、上下文类、Dto、实体类、Infrastructure。

改为:Web、Service、Repository、Entity(上下文Dbcontext、实体类)、Dto、Infrastructure。

但有问题:当Service 引用实体类时(如新建对象),上下文也暴露给Service层。

按解耦思想是不能耦合的,但对于小公司要考虑软件性能和开发效率的平衡,对于复杂查询,通过上下文查询更简单高效。

(查询不解耦,直接用上下文;增删解耦,调用Repository。)

 

posted @ 2022-07-05 16:37  hao_1234_1234  阅读(430)  评论(0编辑  收藏  举报