Asp.net Core使用EFCore+Linq进行操作
注:EFCore和EF有区别,在core中写的也有一点区别,每个人写法不同仅供参考
写的比较细致耐性一点看完会有收获的
首先加上必要的引用
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.Infrastructure;
然后在自己创建好的类文件里面写
namespace MS.Services.Data
{
public class MSDb : DbContext //引用DbContext
{
public MSDb(DbContextOptions<MSDb> options) : base(options)//传到基层,类似为实例化一下可写可不写
{
}
DbSet<TEntity>可用于查询和保存的实例 TEntity 。 针对的 LINQ 查询 DbSet<TEntity> 将转换为针对数据库的查询
public virtual DbSet<User> Users { get; set; }//跟写实体类一样定义几个和数据库交互的字段
public virtual DbSet<Enterprise> Enterprises { get; set; }
}
}
第二步调用上面的MSDb,我这里是换了一个类写的
namespace MS.Services.Data
{
public class Model
{
protected MSDb DbContext { get; private set; } public Model(CertMSDb dbContext)
{
DbContext = dbContext;
}
}
}
第三步加点关键性的方法
namespace MS.Services.Data
{
public class Model
{
protected MSDb DbContext { get; private set; } public Model(CertMSDb dbContext)
{
DbContext = dbContext;
} 这是基本的保存更改,你进行处理的数据处理的是取出来在程序里面的,需要保存更改才能真正修改数据库数据
public void SaveChanges()
{
DbContext.SaveChanges();
}
目前考虑高并发基本都是用异步保存更改的,这个用的是最多的
public async Task SaveChangesAsync()
{
await DbContext.SaveChangesAsync();
}
}
}
还有就是这个当然有直接的增删改查,但是直接存会有很多问题比如:1.当很多条数据在不同的表里面的时候那就需要一条一条每个表存一次,2.当高并发的时候处理数据的时候,A才存了一半,而B覆盖了A的一半,这个时候A又覆盖了B的前一半乱了的问题,3.处理速度问题
必要的时候也用这种
public virtual async Task<T> AddCoreAsync<T>(T model)
{
return DbContext.Add<T>(model).Entity;
}
public virtual IQueryable<T> Query<T>()
{
return DbContext.Set<T>();
}
最终呈现的就是下面的样子
namespace MS.Services.Data
{
public class Model
{
protected MSDb DbContext { get; private set; } public Model(CertMSDb dbContext)
{
DbContext = dbContext;
}
public void SaveChanges()
{
DbContext.SaveChanges();
}
public async Task SaveChangesAsync()
{
await DbContext.SaveChangesAsync();
}
public virtual async Task<T> AddCoreAsync<T>(T model)
{
return DbContext.Add<T>(model).Entity;
}
public virtual IQueryable<T> Query<T>()
{
return DbContext.Set<T>();
}
}
}
最后一步就是使用了 ,注意我换了一个文件定义,不建议写一起,改起来不方便
定义一下,方便到处使用
namespace MS.Services
{
引用写好的EF处理的类传入我要自己的实体类
public class UserService : Model<User>
{
//实例化一下,免得后面还要进行处理
public UserService(MSDb dbContext) : base(dbContext) { }
}
}
接下来就是使用阶段,怎么使用我们定义好的,上面定义好了不需要第二次处理
namespace MS.WebApi.Controllers
{
public class UserController
{
调用上面我们处理好了的类直接使用就可以了
private readonly UserService _userService;
public UserController(UserService userService)
{
_userService = userService;//日常实例一下
}
public async Task<IActionResult> List(LoginDto dto)
{
使用就是这样使用,默认查询到所有数据,没有筛选
var result = await _userService.Query();
}
}
}
如果加条件的话可以使用PredicateBuilder进行筛选,条件判断 需要了解PredicateBuilder相关点下方链接
public async Task<IActionResult> List(Model filter)
{
var express = PredicateBuilder.New<Result>()
.And(x => x.Id == filter.Id)
.And(x => x.Title==filter.Title);
var result = await _userService.Query(express);
// 或者不习惯可以用
var result = await _userService.Query().where(express);
}
PredicateBuilder详细讲解使用方法:https://www.cnblogs.com/liaote/p/15411845.html
希望上述能帮到你
Asp.net Core使用EFCore+Linq进行操作的更多相关文章
- asp.net core 与EFcore 入门
什么是EFcore? Entity Framework (EF) Core 是轻量化.可扩展和跨平台版的常用 Entity Framework 数据访问技术,EF Core 可用作对象关系映射程序 ( ...
- ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)
操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...
- ASP.NET Core Web API Cassandra CRUD 操作
在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ...
- ASP.NET Core使用HostingStartup增强启动操作
概念 在ASP.NET Core中我们可以使用一种机制来增强启动时的操作,它就是HostingStartup.如何叫"增强"操作,相信了解过AOP概念的同学应该都非常的熟悉.我们常 ...
- asp.net core 之静态文件目录的操作
文章前言 之前写了一篇关于模拟登录的文章,自我感觉内容不太丰富,今天的这篇文章,希望在内容上能丰富些.本人缺少写文章的经验,技术上也是新手,但我会努力的,希望大家多多支持小弟. asp.net cor ...
- [译]ASP.NET Core 2.0 本地文件操作
问题 如何在ASP.NET Core 2.0中受限地访问本地目录和文件信息? 答案 新建一个空项目,修改Startup类,添加访问本地文件所需的服务: public void ConfigureSer ...
- Angualr+asp.net core webapi+efcore系列
想着学习一门前端框架,WTF,看了又看,卧槽对于.Net程序员来说,还有什么比面向对象更香的呢,所以果断的选择了Angular.正好看各路大神以及官方文档想学习一下asp.net core,那就搞起吧 ...
- Asp.Net Core Identity+EFCore + Mysql踩坑记录
搭建基础框架准备试试传说中的Identity,本以为很顺利,结果一路踩了N多坑 遂就把过程记录下来.方便自己以后查看,也希望能帮到遇到同样问题的朋友. 1.首先,引入Identity需要的类库,还有M ...
- ASP.NET Core使用EPPlus操作Excel
1.前言 本篇文章通过ASP.NET Core的EPPlus包去操作Excel(导入导出),其使用原理与NPOI类似,导出Excel的时候不需要电脑上安装office,非常好用 2.使用 新建一个AS ...
随机推荐
- Docker(23)- 注册 docker hub 的账号
如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 前言 Docker Hub 是 ...
- io流-缓冲流
单独去数据时,数据按块读入缓冲区,其后的操作则直接访问缓冲区 但是用 BufferedInputStream读取字节文件时,
- pycharm的常规使用
1.修改当前项目的Py版本,是py2还是py3 pycharm-->settings-->选中要运行的项目-->选择py版本(如果你两个py版本都装在本机的话) 2.显示行数 在每行 ...
- find用法 以及和exec xargs 的组合使用
1.查找当前目录下所有的txt的文件 [root@master1 ~]# find . -name "*.txt" -type f ./a.txt ./b.txt 2.exec 结 ...
- Ubuntu中类似QQ截图的截图工具并实现鼠标右键菜单截图
@ 目录 简介: 安装: 设置快捷键: 实现鼠标右键菜单截图: 简介: 在Windows中用惯了强大易用的QQ截图,会不习惯Ubuntu中的截图工具. 软件名为火焰截图,功能类似QQ截图,可以设置快捷 ...
- 3.15学习总结(Python爬取网站数据并存入数据库)
在官网上下载了Python和PyCharm,并在网上简单的学习了爬虫的相关知识. 结对开发的第一阶段要求: 网上爬取最新疫情数据,并存入到MySql数据库中 在可视化显示数据详细信息 项目代码: im ...
- TP5增加扩展配置目录
ThinkPHP5.0.1版本开始增加了扩展配置目录的概念,在应用配置目录或者模块配置目录下面增加extra子目录,下面的配置文件都会自动加载,无需任何配置. 这极大的方便了我们进行扩展配置,比如在a ...
- 解决navicat 导出excel数字为科学计数法问题
1.原因分析 用程序导出的csv文件,当字段中有比较长的数字字段存在时,在用excel软件查看csv文件时就会变成科学技术法的表现形式. 其实这个问题跟用什么语言导出csv文件没有关 ...
- python实现rtsp取流并截图
import cv2 def get_img_from_camera_net(folder_path): cap = cv2.VideoCapture("rtsp://admin:admin ...
- centos7有关于防火墙的命令
查看防火墙状态 firewall-cmd --state 开启防火墙 systemctl start firewalld.service 关闭防火墙 systemctl stop firewalld. ...