注: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进行操作的更多相关文章

  1. asp.net core 与EFcore 入门

    什么是EFcore? Entity Framework (EF) Core 是轻量化.可扩展和跨平台版的常用 Entity Framework 数据访问技术,EF Core 可用作对象关系映射程序 ( ...

  2. ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)

    操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...

  3. ASP.NET Core Web API Cassandra CRUD 操作

    在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ...

  4. ASP.NET Core使用HostingStartup增强启动操作

    概念 在ASP.NET Core中我们可以使用一种机制来增强启动时的操作,它就是HostingStartup.如何叫"增强"操作,相信了解过AOP概念的同学应该都非常的熟悉.我们常 ...

  5. asp.net core 之静态文件目录的操作

    文章前言 之前写了一篇关于模拟登录的文章,自我感觉内容不太丰富,今天的这篇文章,希望在内容上能丰富些.本人缺少写文章的经验,技术上也是新手,但我会努力的,希望大家多多支持小弟. asp.net cor ...

  6. [译]ASP.NET Core 2.0 本地文件操作

    问题 如何在ASP.NET Core 2.0中受限地访问本地目录和文件信息? 答案 新建一个空项目,修改Startup类,添加访问本地文件所需的服务: public void ConfigureSer ...

  7. Angualr+asp.net core webapi+efcore系列

    想着学习一门前端框架,WTF,看了又看,卧槽对于.Net程序员来说,还有什么比面向对象更香的呢,所以果断的选择了Angular.正好看各路大神以及官方文档想学习一下asp.net core,那就搞起吧 ...

  8. Asp.Net Core Identity+EFCore + Mysql踩坑记录

    搭建基础框架准备试试传说中的Identity,本以为很顺利,结果一路踩了N多坑 遂就把过程记录下来.方便自己以后查看,也希望能帮到遇到同样问题的朋友. 1.首先,引入Identity需要的类库,还有M ...

  9. ASP.NET Core使用EPPlus操作Excel

    1.前言 本篇文章通过ASP.NET Core的EPPlus包去操作Excel(导入导出),其使用原理与NPOI类似,导出Excel的时候不需要电脑上安装office,非常好用 2.使用 新建一个AS ...

随机推荐

  1. 看清Mysql执行计划的真面目

    ​  Explain语法 EXPLAIN SELECT -- 变体: 1. EXPLAIN EXTENDED SELECT -- 将执行计划"反编译"成SELECT语句,运行SHO ...

  2. JS边角料: NodeJS+AutoJS+WebSocket+TamperMonkey实现局域网多端文字互传

    ---阅读时间约 7 分钟,复现时间约 15 分钟--- 由于之前一直在用的扩展 QPush 停止服务了,苦于一人凑齐了 Window, Android, Mac, ios 四种系统的设备,Apple ...

  3. AntDesign VUE:上传组件图片/视频宽高、文件大小、image/video/pdf文件类型等限制(Promise、Boolean)

    文件大小限制 - Promise checkFileSize(file, rules) { return new Promise((resolve, reject) => { file.size ...

  4. vue-element-admin 全局loading加载等待

    最近遇到需求: 全局加载loading,所有接口都要可以手动控制是否展示加载等待的功能 当拿到这个需求的时候我是拒绝的,因为我以及局部写好了0.0,这是要大改呀....,没办法老板的要求,只能硬着头皮 ...

  5. vue-admin-element 页面跳转

    1.通过router-link 进行跳转 <router-link to="/china-quotation/business-function/quotation-request&q ...

  6. Emit优化反射(属性的设置与获取)

    在频繁的通过反射来设置和获取属性的值时是比较耗时的,本章通过Emit技术优化反射来提高获取和设置属性值的效率 一.实现代码: /// <summary> /// 设置器委托 /// < ...

  7. Linux内核下包过滤框架——iptables&netfilter

    iptables & netfilter 1.简介 netfilter/iptables(下文中简称为iptables)组成Linux内核下的包过滤防火墙,完成封包过滤.封包重定向和网络地址转 ...

  8. TP5模型开启事务

    和Db开启事务类似,Db是静态方法 $userObj = new UserModel(); $userObj->startTrans(); try { $userObj->data($da ...

  9. Shell系列(23)- 字符截取命令sed

    简述 字符替换命令sed 和vi功能相似,但是vi是给用户用的,sed是给脚本用的 sed是一种几乎包括在所有的UNIX平台(包括Linux)的轻量级流编辑器.s sed主要是用来将数据进行选取.替换 ...

  10. Jmeter集合点技术

    集合点简介 好比小学时候做广播体操,先让大家集合,等到时间统一开始做体操. 创建集合点 同步定时器 同时签到 注意:作用域 参数设置 用户数 为0 具体数值,不能大于 超时时间 为0,没有超时时间 具 ...