zoukankan      html  css  js  c++  java
  • 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

    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相关引用

    我需要连接两个库,有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才开始支持对没有主键的表和视图进行映射,来自官方文档:

    在上下文中定义视图时用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的时间不长,还没有太深入的使用,简单学习记录,有错误和建议的话还望指正~

  • 相关阅读:
    leetcode — simplify-path
    leetcode — climbing-stairs
    leetcode — sqrtx
    leetcode — text-justification
    leetcode — add-binary
    leetcode — plus-one
    leetcode — valid-number
    leetcode — minimum-path-sum
    leetcode — unique-paths-ii
    四维偏序 CDQ套CDQ
  • 原文地址:https://www.cnblogs.com/gxsxc/p/10826891.html
Copyright © 2011-2022 走看看