前沿
园子里已有挺多博文介绍了EFCore+Mysql/MSSql如何进行使用,但实际开发不会把EF层放在Web层混合起来,需要多个项目配合结构清晰的进行分层工作,本文根据个人实践经验总结将各个项目进行分层,仅供想自己搭建,包含数据仓储以及分页多字段排序。
目录结构 1.实体层(EF)搭建 1.1添加Nuget包 1.2添加实体 1.3构造DbContext 1.4数据迁移生成数据库 2.仓储层搭建 2.1添加Nuget包 2.2添加必要的支持IEnumerable和IQueryable 的OrderBy字符串支持类LinqExtensions 2.3构造RepositoryBase 2.5添加工作单元UnitOfWork 3.WebApi项目测试 3.1注入EF 3.2测试 4.Github项目地址 正文 1.实体层(EF)搭建
新建.NetCore类库项目Entity,本人使用的是2.0的SDK
1.1添加Nuget包 PM> Install-Package Microsoft.AspNetCore.All -version 2.0.9 PM> Install-Package Pomelo.EntityFrameworkCore.MySql -version 2.0.1
1.2添加实体
父类EntityBase
实体类SysUser
1.3构造DbContext
在这有重写OnConfiguring方法,如果没有构造数据库链接字符串的话则到appsettings.json中去取,注意将appsettings.json文件始终复制
appsettings.json
{
"ConnectionStrings": {
"SQLConnection": "server=127.0.0.1;database=eftest;userid=root;pwd=123456;port=3306;sslmode=none;"
},
"server.urls": "http://localhost:5001" //监听端口配置,可多个
}
1.4数据迁移生成数据库
打开PM选择默认项目Entity
输入
PM> Add-Migration init
若提示The configuration file 'appsettings.json' was not found and is not optional. The physical path is 'E:VS项目EFTestEntitybinDebugnetcoreapp2.0appsettings.json'.
则为没检测到appsettings.json,需要文件更改属性为复制
提示后进行更新数据库,如下为更新成功。
PM> update-database
最后Entity项目内容如下
2.仓储层搭建
新建.NetCore类库项目Repository并引用项目Entity
2.1添加Nuget包 PM> Install-Package Microsoft.EntityFrameworkCore -version 2.0.3 PM> Install-Package LinqKit.Microsoft.EntityFrameworkCore -version 1.1.15
2.2添加必要的支持IEnumerable和IQueryable 的OrderBy字符串支持类LinqExtensions
以及分页支持类PageData
2.3构造RepositoryBase
2.5添加工作单元UnitOfWork
这样仓储层就构造完成了,篇幅已经很长了,Service层就先不介绍了。
3.WebApi项目测试
新建.NetCore的项目的Web应用程序ApiTest,选择webapi方式,并引用Entity和Repository项目
3.1注入EF
3.2测试
测试结果:
仓储分页查询 测试