反向工程就是DB First,根据数据库表来反向生成实体类代码,通俗讲就是数据库优先。
该方法使用场景为已经有数据库了,数据库里面已经存在一些表,这时候想使用EF Core框架的情况。官方并不推荐使用反向工程,因为这种方法生成的代码,后期维护起来比较麻烦。推荐使用Code First模型,即代码优先。
项目操作示例:
1.在SqlServer数据库中新建一个库,名字为TestDbHR。在数据库中新建一个表,表名为T_PERSON,字段信息如下图所示。
2.新建一个控制台项目,并引用下面两个程序集。
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools
3.在vs的程序包管理器控制台中输入命令,根据数据库连接和数据库名称生成表所对应的实体类。
scaffold-dbcontext 'server=.;database=testdbhr;trusted_connection=true;MultipleActiveResultSets=true' microsoft.entityframeworkcore.sqlserver
命令解读:
server属性的值为数据库连接地址,因为我这里是本地电脑,所以用.(点)。如果是服务器上的数据库,则填写对应的地址。
testdbhr:需要生成实体类的数据库名称 。
命令执行完成后,可以看到项目文件夹中新生成了两个文件:
到此为止,反向工程的操作就完成了。
如果数据库中又新增了表,那么只需要再次执行下第三步的命令(需要在原有命令行后面加上 -force),就可以为新加的表生成对应的实体。下面演示下操作步骤:
a.数据库增加一张名为T_DOG的表
b.在vs的程序包管理器控制台中输入命令
scaffold-dbcontext 'server=.;database=testdbhr;trusted_connection=true;MultipleActiveResultSets=true' microsoft.entityframeworkcore.sqlserver -force
命令执行完毕后,可以看到新加的表对应的实体类,被自动创建出来。
注意事项:
1.生成的实体类可能不满足项目的要求,可能需要手工修改或者增加配置。
2.再次运行反向工程工具,对文件所做的任何更改都将丢失。
3.不建议把反向工具当做日常开发工具使用。不建议DBFirst。