使用EF Core创建webapi接口(二)

这篇具有很好参考价值的文章主要介绍了使用EF Core创建webapi接口(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

有错误欢迎大家给我指正

说明:netcore webapi+net6+EF Core版本,codefirst模式(代码创建数据库)

1.netcore webapi+net6+EF Core版本,dbfirst模式(代码生成数据库)见:使用EF Core创建webapi接口(一)-CSDN博客

2.netcore webapi+net6+EF Core+vue前后端联动版本,见netcore webapi+net6+EF Core+vue3前后端联动-CSDN博客

3.netcore webapi+net6+sqlsugar+vue2前后端联动版本,见Sqlsugar+vue2实现增删改查,分页查询,net6实现_.net core 6.0 sqlsugar-CSDN博客

1.创建netcore weiapi+net6项目

ef web接口调用,.netcore,c#,sql,.net

ef web接口调用,.netcore,c#,sql,.net

ef web接口调用,.netcore,c#,sql,.net

2.安装nuget包

Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore.Tools

注意,最新版本只支持net8.0,需要降级到7版本就行

ef web接口调用,.netcore,c#,sql,.net

3.创建实体类

上方创建的数据库中的表名为Daily,所以在此处也创建相同名字的实体类,以便区分

public class Daily
{
    public int Id { get; set; }
    public string Title { get; set; }
}

 创建页数类

public class Page
{
    public int PageIndex { get; set; } // 当前页码
    public int PageSize { get; set; } // 每页记录数
}

创建修改的内容类

public class Addreq
{
    public string Title { get; set; }
}

4.创建上下文

public class MyContext : DbContext
{
    public MyContext(DbContextOptions<MyContext> options)
        : base(options)
    {
    }
    //定义数据集合:用于创建表
    public DbSet<Daily> Daily { get; set; }

    // 此方法将在数据库第一次创建时自动调用
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Daily>().Property(e => e.Id).ValueGeneratedOnAdd();
        // 添加初始种子数据
        //EF Core 要求种子数据的主键属性是非零值。
        //默认情况下,EF Core 认为主键为零的实体是要插入到数据库中的新实体,
        //而不是种子数据
        //可以将种子数据的 Id 属性值设置为负数或其他非零值,以避免与非种子数据发生冲突
        modelBuilder.Entity<Daily>().HasData(
            new Daily { Id = -1, Title = "Daily 1" },
            new Daily { Id = -2, Title = "Daily 2" }
        );
    }

5.连接数据库字符串

这是我的

"ConnectionStrings": {
  "MyContext": "Server=.;DataBase=demo1;uid=sa;pwd=123456;TrustServerCertificate=true"
},

TrustServerCertificate=true 的作用是告诉 SQL Server 客户端在建立与服务器的 SSL 连接时信任自签名或无效证书

添加到appsetting.json,全文如下

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "MyContext": "Server=.;DataBase=数据库名;uid=账号;pwd=密码;TrustServerCertificate=true"
  },
  "AllowedHosts": "*"
}

6.添加映射关系

builder.Services.AddDbContext<MyContext>
    (opt =>
    {
        string connectionString = builder.Configuration.GetConnectionString("MyContext");
        opt.UseSqlServer(connectionString);
    });

必须写在var app = builder.Build();前面,因为:

在构建应用程序之后,无法修改 ServiceCollection, 确保在调用 Build() 方法之前,所有的服务配置代码已经完成,并且没有额外的试图修改 ServiceCollection 的代码,所以连接数据库服务必须写在这

添加到Program.cs,全文如下

using Microsoft.EntityFrameworkCore;
using todo.Service;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddDbContext<MyContext>
    (opt =>
    {
        string connectionString = builder.Configuration.GetConnectionString("MyContext");
        opt.UseSqlServer(connectionString);
    });
var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

//可跨域,以便前端使用接口
app.UseCors(t => t.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod());

app.UseAuthorization();

app.MapControllers();

app.Run();

7.生成数据库

工具-nuget包管理器-程序包管理器控制台

输入add-migration init

update-database

ef web接口调用,.netcore,c#,sql,.net

ef web接口调用,.netcore,c#,sql,.net

ef web接口调用,.netcore,c#,sql,.net

没有报错,可以到数据库查看是否生成成功,成功后进行下一步

8.添加控制器,并实现增删改查

注意,这些代码只是实现了简单的增删改查,没有添加如非空判断和其他错误判断文章来源地址https://www.toymoban.com/news/detail-833421.html

 [Route("api/[controller]")]
 public class TodoController : ControllerBase
 {
     private readonly MyContext context;
     public TodoController(MyContext context)
     {
         this.context = context;
     }
     [HttpGet]
     public IEnumerable<Daily> GetAll()
     {
         if (!context.Daily.Any())
         {
             return (IEnumerable<Daily>)Enumerable.Empty<string>().Append("无数据");
         }
         return context.Daily.ToList();
     }
     [HttpGet("分页查询数据")]
     public IActionResult GetByPage([FromQuery] Page page)
     {
         //查询上下文中Daily实体的查询
         var query = context.Daily;

         //这是一系列LINQ方法,用于对查询结果进行分页操作。
         //Skip方法用于跳过指定数量的元素,
         //Take方法用于选择指定数量的元素,
         //ToList方法用于将查询结果转换为List集合。
         var userList = query.Skip((page.PageIndex - 1) * page.PageSize)
                 .Take(page.PageSize)
                 .ToList();
         //统计了Daily实体的总数
         var totalCount = context.Daily.Count();

         var result = new
         {
             TotalCount = totalCount,//数据总数
             Data = userList
         };

         return Ok(result);
     }
     [HttpPost("添加数据")]
     public IActionResult Create(Addreq req)
     {
         if (req.Title == null)
         {
             //如果绑定失败或传入的对象为空,
             //方法会返回一个 HTTP 400 Bad Request 响应
             return BadRequest();
         }
         Daily info = new Daily()
         {
             //生成一个唯一的哈希码作为ID,不使用则按照定义的自增增加
             //Id = Math.Abs(Guid.NewGuid().GetHashCode()),
             Title = req.Title
         };
         context.Daily.Add(info);
         context.SaveChanges();

         return Ok(info);
     }
     [HttpPut("修改数据")]
     public IActionResult Update(int id, [FromBody] Daily updatedDaily)
     {
         var daily = context.Daily.FirstOrDefault(m => m.Id == id);
         if (daily != null)
         {
             daily.Title = updatedDaily.Title;
             context.SaveChanges();
         }

         return Ok();
     }
     [HttpDelete("删除数据")]
     public IActionResult Delete(int id)
     {
         var daily = context.Daily.Find(id);
         if (daily == null)
         {
             return NotFound();
         }

         context.Daily.Remove(daily);
         context.SaveChanges();

         return NoContent();
     }
 }

到了这里,关于使用EF Core创建webapi接口(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何在 EF Core 中使用乐观并发控制

    乐观并发控制是一种处理并发访问的数据的方法,它基于一种乐观的假设,即认为并发访问的数据冲突的概率很低。在乐观并发控制中,系统不会立即对并发访问的数据进行加锁,而是在数据被修改时,再检查是否有其他并发操作已经修改了数据。如果检测到冲突,系统 再采

    2024年02月04日
    浏览(40)
  • Net Core中使用EF Core连接Mysql数据库

    Entity Framework Core的前身是微软提供并主推的ORM框架,简称EF,其底层是对ADO.NET的封装。EF支持SQLServer、MYSQL、Oracle、Sqlite等所有主流数据库。 首先是使用时的几个模式的整理及其理解: Code First:根据代码自动创建数据库表结构甚至是数据库,可以支持多库开发,代码较少冗余

    2024年01月24日
    浏览(49)
  • EF.Core 使用Linq的Contact联合查询问题

    在.net Core 5 WebAPI 项目中应用 EF Core 5 实体框架,使用Linq的Contact联合进行多表查询。 定义两个子查询语句,查询结果 select 返回的对象结构类型都是一致的。 Linq查询结果集封装对象类: DatingComplaint 实体类映射(Fluent API): 但在执行到 ToListAsync() 代码行查询返回结果时,抛

    2024年02月13日
    浏览(41)
  • .NET使用一行命令轻松生成EF Core项目框架

    dotnet ef是Entity Framework Core(EF Core)的一个命令行工具,用于管理EF Core应用程序的数据库和代码。除了提供管理数据库的命令之外,dotnet ef还可以生成和管理实体和上下文代码。本文将介绍如何使用dotnet ef动态生成代码。 一、环境准备 1、项目准备 用vs2022新建一个.NET6的asp.

    2023年04月27日
    浏览(52)
  • NET8 ORM 使用AOT SqlSugar 和 EF Core

    .Net8的本地预编机器码NET AOT,它几乎进行了100%的自举。微软为了摆脱C++的钳制,做了很多努力。也就是代码几乎是用C#重写,包括了虚拟机,GC,内存模型等等。而需要C++做的,也就仅仅是引导程序,本篇通过代码来看下这段至关重要的引导程序的运作模式。      SqlSugar已经

    2024年02月05日
    浏览(52)
  • 4.1EF Core

    EF Core是微软官方的ORM框架,ORM即对象关系映射,也就是我们可以直接操作C#中的对象就可以完成数据库的操作。 EF Core环境搭建 首先要创建C#对象,用以对应数据库中的表,该C#对象也成为实体类。 根据所用的数据库选择NuGet包,本文使用SQLite数据库,所以安装Microsoft.EntityF

    2024年02月05日
    浏览(36)
  • EF Core入门

    EF Core是微软官方提供的ORM框架。EF Core不仅可以操作Microsoft SQL Server、MySQL、Oracle、PostgreSQL等数据库,而且可以操作Azure Cosmos DB等NoSQL数据库 前提条件:已经完整安装了Microsoft SQL Server 下面是一个实际操作EF Core的演示 这是项目最终的目录,这里需要关注的就是 .cs 文件 首先新

    2023年04月09日
    浏览(32)
  • EF Core并发控制

    并发控制:避免多个用户同时操作资源造成的并发冲突问题。 最好的解决方案:非数据库解决方案 数据库层面的两种策略:悲观、乐观 悲观并发控制一般采用行锁 ,表锁等排他锁对资源进行锁定,确保同时只有一个使用者操作被锁定的资源。 EF Core没有封装悲观并发控制的

    2024年02月10日
    浏览(46)
  • 【EF Core】实体的主、从关系

    假设有以下两个实体: Homework 类表示家庭作业,它并不是独立使用的,而是与学生类(Student)有依赖关系。一位学生有多个家庭作业记录,即 Homework 对象用于记录每位同学的作业的。按照这样的前提,Student 是主对象,Homework 是从对象。 Student 对象有个 Homeworks 属性,用于引

    2024年02月11日
    浏览(43)
  • 不会使用 EF Core 的 Code First 模式?来看看这篇文章,手把手地教你

    Code First 是 Entity Framework Core (简称 EF Core) 的一种开发模式,它允许开发人员使用纯粹的代码来定义数据模型,通过它,可以极大地提高开发效率: 使用 Code First 开发模式,你可以专注于定义领域模型和业务逻辑,而无需关注数据库的细节,能够更快地构建应用程序 Code F

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包