A_01 entity framework core
ef core是什么?
ef core 是微软推出的orm框架,功能强大,支持Linq及sql语句操作数据库,开发非常方便。
与其他orm框架对比
优点:ef core功能非常强大易用,开发非常快速,比如采用linq操作增、删、改、查,维护数据库的模型-表,数据一致性,数据迁移都非常方便;
缺点:与ado.net、dapper相比,性能会差些,但是95%应用场景都是在可靠的性能范围之内;
在数据库持久化操作上我的使用策略:采用ef core orm框架,如果是存在性能上面的问题,则在设计上及扩展上做处理,如果数据库的读写分离、合理利用索引、在特别耗性能的操作上,如果ef core无法保证,则扩展高性能的数据库持久化方式(如使用sql语句操作,ado.net,dapper)等。
ef core使用
常规使用流程:
1、引用 ef core相关nuget包;
2、定义/或数据库逆向生成模型,将模型作为属性定义在DbContext;
3、通过操作DbContext完成对数据库的操作;
我采用的是abp vnext框架,对ef core的使用参见一下截图:
ef core 功能点使用操作
Db First模型生成与 Code First迁移
安装需要的包(以SqlServer为例):
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.SqlServer.Design
Microsoft.EntityFrameworkCore.Tools
DbFirst:
生成:Scaffold-DbContext -Connection "Server=.;Database=WriteAspNetCoreDataBase;uid=sa;pwd=sa123" Microsoft.EntityFrameworkCore.SqlServer -OutputDir "Models"
加上一下命令可以在模型中生成与数据库关联映射的特性: -Force -DataAnnotations
Code First Migration:
context.Database.EnsureDeleted(); //删除数据库
context.Database.EnsureCreated(); //创建数据库和表
add-migration Init02
update-database
dotnet ef migrations add Init07
dotnet ef database update
方式选择:
我喜欢用Db First方式,在需求确认的了情况下,通过powerdesigner设计数据库,如此可以将数据库层设计的更加合理,更加适合于各种系统适配,而且相当于有了比较好的文档,有利于需求评审,需求分析时,后期维护、工作交接等工作。同时设计好了数据库,可以直击生成代码模型,不用投入什么时间维护模型与数据库表的关系一致性。而Code First 虽然感觉少了数据库的设计,只是设计模型,但是设计的时候可视化不高,设计出来的东西没那么合理,而且过于跟c# ef core藕合,不方便与其他技术栈和运维人员适配。