EFCore 数据请求

- EFCore

Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。

EF Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点:

  • 使 .NET 开发人员能够使用 .NET 对象处理数据库。

  • 无需再像通常那样编写大部分数据访问代码。

  • EF Core 支持多个数据库引擎,请参阅数据库提供程序了解详细信息。

1.引用组件

Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Design

 2.安装dotnet-ef     dotnet tool  install -g dotnet-ef

 3.生成实体类 指定输出文件夹为Models

Scaffold-DbContext "Server=.;Database="dbName";uid=*;pwd=*; TrustServerCertificate=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

  

1.png

4. 注入

//依赖注入IOC
builder.Services.AddDbContext(options => options.UseSqlServer(
    builder.Configuration.GetConnectionString("DefaultConnection")
    ));

5.创建通用基础类,可自行封装

 public interface IBaseService where T : class, new()
    {
        
       Task Query();
       Task Query(Expression func);
       Task Query(int pageIndex, int size, RefAsync total);
       Task Query(Expression func, int pageIndex, int size, RefAsync total);

    }


6.创建类继承自IBaseService,WmblogMssqlMainContext 为刚才生成的DbContext

public class BaseService : IBaseService where T : class, new()
{
    protected WmblogMssqlMainContext db;
    protected DbSet dbSet;
    public DbSet DbSet { get; set; }
    public BaseService(WmblogMssqlMainContext myBlogContext)
    {
        db = myBlogContext;
        dbSet = db.Set();
    }
    public async Task Query()
    {
        return await dbSet.ToListAsync();
    }

    public async Task Query(Expression func)
    {
        return await dbSet.Where(func).ToListAsync();
    }

    public async Task Query(int pageIndex, int size, RefAsync total)
    {
        var qresult = dbSet.Skip((pageIndex - 1) * size).Take(size);
        total.Value = dbSet.Count();
        return await qresult.ToListAsync();

    }

    public async Task Query(Expression func, int pageIndex, int size, RefAsync total)
    {
        var qresult = dbSet.Where(func).Skip((pageIndex - 1) * size).Take(size);
        total.Value = dbSet.Count();
        return await qresult.ToListAsync();
    }
}

7. Program 注入基础类

builder.Services.AddScoped(typeof(IBaseService<>), typeof(BaseService<>));

8.Controller 调用

  public class BlogController : ControllerBase
  {
      private readonly IBaseService blogNewsService;
      public BlogController(IBaseService blogNewsService)
      {
          this.blogNewsService = blogNewsService;
      }
      [HttpGet]
      public async Task GetAll()
      {
          var blogNewsList = await blogNewsService.Query();
          if (blogNewsList == null || blogNewsList.Count == 0) return ApiResultHelper.Error("没有文章数据");
          else
          {
              return ApiResultHelper.Success(blogNewsList);
              //return ApiResultHelper.Success(mapper.Map(blogNewsList));
          }

      }
  }

参考:https://learn.microsoft.com/zh-cn/ef/efcore-and-ef6/

相关文章!