注: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. adb 常用命令大全(7)- 其他实用功能

    屏幕截图 adb exec-out screencap -p > sc.pn 截图保存到电脑执行该命令的目录下 如果指定文件名以 .png 结尾时可以省略 -p 参数 注意 如果 adb 版本较 ...

  2. C语言实现任务调度与定时器

    代码实现是在xl2tpd的源码中get到的,感觉很有意思的一段代码.基本功能就是实现定时器,时间到后从定时队列中取出,然后完成指定的任务. 1. schedule.c代码(自己添加了main函数,用来 ...

  3. error: object file .git/objects/...

    cd .git find . -type f -empty -delete -print tail -n 2 .git/logs/refs/heads/master git show xxxx(版本号 ...

  4. 一文详解JavaScript的继承模式

    1 原型链继承 #### ES6中通过原型继承多个引用类型的属性和方法,由于原型和实例的关系,即每个构造函数都有自己的原型对象,同时原型有一个属性指向构造函数,并且实例有一个内部的指针指向原型.如果存 ...

  5. Cookie和Session的介绍与认识

    Cookie: cookie是一种客户端的状态管理技术. 当浏览器向服务器发送请求的时候,服务器会将少量的数据以set-cookie消息头的方式发送给浏览器,当浏览器再次访问服务器时,会将这些数据以c ...

  6. PHP中比较数组的时候发生了什么?

    首先还是从代码来看,我们通过比较运算符号来对两个数组进行比较: var_dump([1, 2] == [2, 1]); // false var_dump([1, 2, 3] > [3, 2, ...

  7. springboot 运行出现错误 Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

    原因是我将springboot启动类换到了另外一个方法中 出现了一个异常 后来发现因为我换了类但是忘记了换类名所以才报错 @ComponentScan @EnableAutoConfiguration ...

  8. CF235D-Graph Game【LCA,数学期望】

    正题 题目链接:https://www.luogu.com.cn/problem/CF235D 题目大意 给出一棵基环树,每次随机选择一个点让权值加上这个点的连通块大小然后删掉这个点. 求删光所有点时 ...

  9. P4590-[TJOI2018]游园会【dp套dp】

    正题 题目链接:https://www.luogu.com.cn/problem/P4590 题目大意 给出一个长度为\(m\)的字符串\(s\). 对于每个\(k\in[0,m]\)求有多少个长度为 ...

  10. Vue组件间的数据传输

    1.父组件向子组件传输数据:自定义属性 1 //父组件 2 <Son :msg="message" :user="userinfo"></So ...