ASP.NET Core MVC中Hangfire及EF Core的简单使用

摘要:
延迟任务可以达到第二级,而循环任务只能达到分钟级。

项目中可能要实现定时读写数据,所以了解了一下Hangfire,并简单尝试使用,同时又实践了一波EF Core的DB First模式

Hangfire

1.新建ASP.NET Core项目

2.Nuget安装Hangfire的包,因为我Hangfire配置用数据库使用的PostgreSql,所以添加的pg相关的引用,Hangfire官方支持SQL Server和Redis

ASP.NET Core MVC中Hangfire及EF Core的简单使用第1张

3.在Startup.cs的ConfigureServices方法中注入Hangfire服务,数据库连接字符串配置在appsettings.json的ConnectionStrings中,我这里名称是“HangfireConnection”

services.AddHangfire(x => x.UsePostgreSqlStorage(Configuration.GetConnectionString("HangfireConnection")));

Configure方法中配置使用Hangfire,可配置项有很多,这里是简单使用所以不涉及

app.UseHangfireServer();//启用Hangfire服务
app.UseHangfireDashboard();//启用Hangfire面板

4.定时循环处理一个方法,时间间隔一分钟。延时任务支持到秒级,循环任务只支持到分钟。

RecurringJob.AddOrUpdate<IJobService>(x => x.TestFunc(), Cron.Minutely);

EF Core

上面Hangfire中循环执行的TestFunc中需要获取数据库中的数据,因为数据库已经有了,所以试了下EF Core的DB First使用,从前使用EF时Code First模式居多

1.新建.NET Core工程,添加EF Core相关引用

ASP.NET Core MVC中Hangfire及EF Core的简单使用第2张

我需要连接两个库,有SQL Server的,也有PostgreSQL的

2.在程序包管理控制台输入命令,以连接SQL Server为例,ConnectionString为数据库连接字符串,注意执行前要选对工程

Scaffold-DbContext -Connection "ConnectionString" Microsoft.EntityFrameworkCore.SqlServer -OutputDir "Models"

执行成功后生成Models文件夹,里面是Model类

3.这种情况下连接字符串是直接配置在生成的数据上下文类OnConfiguring方法中的,为了方便一般将它配置在appsettings.json中,然后通过services.AddDbContext注入

services.AddDbContext<SPDContext>(options => options.UseNpgsql(Configuration.GetConnectionString("SPDConnection")));
services.AddDbContext<HRWL_DB_ZSzxyyContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SqlServerConnection")));

4.在接口实现中使用时,这里是构造注入,不再像以前一样每次new一个dbcontext的对象

public class JobService : IJobService
{
      public SPDContext _spdcontext { get; }

      public JobService(SPDContext spdcontext)
      {
          _spdcontext = spdcontext;
      }
      public void TestFunc()
      {
          _spdcontext.Goodshelf.Add(new Goodshelf
          {
              Shelfname = "TestData"
          });
          _spdcontext.SaveChanges();
      }
}

5.另外一个需求是查询视图,EF Core 2.1才开始支持对没有主键的表和视图进行映射,来自官方文档:

ASP.NET Core MVC中Hangfire及EF Core的简单使用第3张

在上下文中定义视图时用DbQuery而不是DbSet,只能查询不能增删改

public virtual DbQuery<ERPSPDBianma> ERPSPDBianma { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Query<ERPSPDBianma>().ToView("View_ERP_SPD_BianMa");
}

然后像其他表一样正常使用

var entity = _sscontext.ERPSPDBianma.OrderBy(x => x.WYPBianMa).FirstOrDefault(x => string.Compare(x.WYPBianMa, _bianma) > 0);

我接触EF的时间不长,还没有太深入的使用,简单学习记录,有错误和建议的话还望指正~

免责声明:文章转载自《ASP.NET Core MVC中Hangfire及EF Core的简单使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Djano之数据库--ORMBuffer和Cache的区别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Harbor 2.1.2 安装部署

环境 首先需要准备好 Docker + Docker-Compose 环境,Docker 在 CentOS 7.x 的安装教程请参考 这篇文章,后续文章假设你已经安装好了上述环境。 安装 标准安装 首先从 Harbor 的官方 GitHub Relase 下载最新的安装包,Harbor 本身的运行也是依赖于 Docker Compose ,整个压缩包本质上...

9.翻译:EF基础系列---使用EF开发的方式有哪些?

原文链接:http://www.entityframeworktutorial.net/choosing-development-approach-with-entity-framework.aspx 使用EF有三种方式: Database--First【数据库优先】 Code--First【代码优先】 Model--First【模型优先】 先看看数据...

Linux gdb分析core dump文件

文章目录1. coredump1.1 coredump简介1.2 coredump的文件存储路径1.3 coredump产生的条件1.4 coredump产生原因2. 测试生成coredump1. coredump1.1 coredump简介core dump,又称为核心转储,是操作系统在进程收到某些信号而终止运行时,将此时进程地址空间的内容以及有关进程状...

coredump

1. core文件的简单介绍 在一个程序崩溃时,它一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。 2. 开启或关闭core文件的生成 用以下命令来阻止系统生成core文件:ulimit -c 0下面的命令可以检查生成core文件的选项是否打开:ulimit -a该命令将显示所有的用户定制,其中...

ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门

一、前言 1、本教程主要内容 ASP.NET Core 中间件介绍 通过自定义 ASP.NET Core 中间件实现请求验签 2、本教程环境信息 软件/环境 说明 操作系统 Windows 10 SDK 2.1.401 ASP.NET Core 2.1.3 MySQL 8.0.x IDE Visual Studio C...

.net core 多环境(开发和生产)配置appsettings.json

前言 在我们实际开发过程中一般分为开发环境和生产环境, 这两个环境一般配置会有不一样, 例如数据库连接字符串. .net core 框架中提供三个值, Development(开发), Staging(分阶段), Production(生产环境). 我们可以根据这个来配置不同的环境. 创建appsettings文件 在创建项目的时候系统会默认创建一个app...