ASP.NET Core WebApi + EF Core(实现增删改查,使用Swagger测试API)

EF有两个不同版本,即Entity Framework Core 和 Entity Framework 6

EF Core:轻量级,可扩展,跨平台,参考EF6,全新平台,学习曲线小,引入一些新功能(批量删除

EF 6 :笨重,稳定,微软已经不打算进行大版本升级,无法跨平台。

如何实现EFCore功能

1、创建ASP.NET Core Web应用程序 

2、新建TodoItem类

  首先新建文件夹>Models

  在Models里添加TodoItem类

1 public class TodoItem
2     {
3         public long Id { get; set; }
4         public string Name { get; set; }
5         public bool IsComplete { get; set; }
6     }

3、添加数据库上下文

  选择管理NuGet程序包

      

  选择“浏览”选项卡,然后在搜索框中输入 Microsoft.EntityFrameworkCore.SqlServer

  在左窗格中选择“Microsoft.EntityFrameworkCore.SqlServer” 。

  选中右窗格中的“项目”复选框,然后选择“安装” 。

  使用上述说明再次添加 Microsoft.EntityFrameworkCore.InMemory NuGet

  两个NuGet安装完成后,然后在Models里新建TodoContext类

public class TodoContext : DbContext
    {
        public TodoContext(DbContextOptions<TodoContext> options)
            : base(options)
        {
        }

        public DbSet<TodoItem> TodoItems { get; set; }
    }

4、注册数据库上下文

  在appsettings.json启动配置文件中创建连接sqlserver数据库的语句

  "ConnectionStrings": {
    "todoContext": "server=.;database=TodoDatas;uid=sa;pwd=123456"
  }

  转到Startup类,实现Startup类的构造方法,在ConfigureServices注册数据库上下文

public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public IConfiguration Configuration { get; }
        // 该方法在运行时被调用。
        // 可以使用该方法将服务添加到容器中 例如 ASP.NET Core MVC 、 Entity Framework Core 和 Identity 
        // 更多信息配置应用程序的信息,可以查看 https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            //使用sqlserver数据库
            services.AddDbContext<TodoContext>(opt =>
               opt.UseSqlServer(Configuration.GetConnectionString("todoContext")));
            services.AddControllers();
            services.AddMvcCore();
        }

        // 该方法在运行时被调用
        // 可以使用该方法来配置 HTTP 请求管道/用于定义请求管道中的中间件
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }

5、 安装迁移包—通过代码生成数据库(sqlserver)

  打开程序包管理控制台

  输入:Add-Migration InitDatabase

  输入:update-database 生成数据库

6、添加控制器

  新建文件夹>Controllers

  在Controllers里添加TodoController控制器

namespace EFCoreTest.Controllers
{
    //如果访问的路径为404则需要配置路由
    [Route("api/[controller]")]
    [ApiController]
    public class TodoController : Controller
    {
        private readonly TodoContext _context;
        public TodoController(TodoContext context)
        {
            _context = context; if (_context.TodoItems.Count() == 0)
            {
                // 如果集合为空,则创建新的 TodoItem,
                // which means you can't delete all TodoItems. _context.TodoItems.Add(new TodoItem { Name = "Item1" }); _context.SaveChanges(); 
                _context.TodoItems.Add(new TodoItem { Id = 1, Name = "Item1", IsComplete = false });
                _context.TodoItems.Add(new TodoItem { Id = 2, Name = "Item2", IsComplete = false });
                _context.TodoItems.Add(new TodoItem { Id = 3, Name = "Item3", IsComplete = true });
                _context.SaveChanges();
            }
        }

        [HttpGet]
        public IEnumerable<TodoItem> GetAll() 
        {
            return _context.TodoItems.ToList();
        }
    } 
}

  访问页面为4.4则需要设置路由

  转到launchSettings.json,添加"launchUrl":"api/Todo"

{
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:54029",
      "sslPort": 44320
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/Todo",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "EFCoreTest": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

7、增删改查

namespace EFCoreTest.Controllers
{
    //如果访问的路径为404则需要配置路由
    [Route("api/[controller]")]
    [ApiController]
    public class TodoController : Controller
    {
        private readonly TodoContext _context;
        public TodoController(TodoContext context)
        {
            _context = context;
            if (_context.TodoItems.Count() == 0)
            {
                // 如果集合为空,则创建新的 TodoItem,
                // which means you can't delete all TodoItems. _context.TodoItems.Add(new TodoItem { Name = "Item1" }); _context.SaveChanges(); 
                _context.TodoItems.Add(new TodoItem { Name = "Item1", IsComplete = false });
                _context.TodoItems.Add(new TodoItem { Name = "Item2", IsComplete = false });
                _context.TodoItems.Add(new TodoItem { Name = "Item3", IsComplete = true });

                _context.SaveChanges();
            }
        }

        [HttpGet]
        public IEnumerable<TodoItem> GetAll()
        {
            return _context.TodoItems.ToList();
        }

        /// <summary>
        /// 根据Id查找数据
        /// </summary>
        /// <param name="Id">序号</param>
        /// <returns></returns>
        [HttpGet("{Id}", Name = "GetTodo")]
        public async Task<TodoItem> GetByID(int Id)
        {
            var item = await _context.TodoItems.FirstOrDefaultAsync(t => t.Id == Id);

            return item;
        }

        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> Create([FromBody] TodoItem item)
        {
            if (item == null)
            {
                return BadRequest();
            }
            else
            {
                _context.TodoItems.Add(item);
                await _context.SaveChangesAsync();
                return Ok(item);
            }
        }

        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="Id"></param>
        /// <param name="item"></param>
        /// <returns></returns>
        [HttpPut("{id}")]
        public async Task<IActionResult> Update(int id, [FromBody] TodoItem item)
        {
            if (item == null)
            {
                return BadRequest();
            }
            else
            {
                var todo = _context.TodoItems.SingleOrDefault(t => t.Id == id);

                if (todo == null)
                {
                    return NotFound();
                }
                else
                {
                    todo.IsComplete = item.IsComplete;
                    todo.Name = item.Name;

                    _context.TodoItems.Update(todo);
                    await _context.SaveChangesAsync();

                    return Ok(todo);
                }

            }
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        [HttpDelete("{Id}")]
        public async Task<IActionResult> Delete(int Id)
        {
            var todo = _context.TodoItems.SingleOrDefault(t => t.Id == Id);

            if (todo == null)
            {

                return NotFound();
            }
            else
            {
                _context.TodoItems.Remove(todo);
                await _context.SaveChangesAsync();

                return Ok();
            }
        }
    }
}

  运行效果展示

8、使用swagger

  Swagger兼具了API文档管理和测试的功能

  打开程序包管理控制台

  输入:Install-Package Swashbuckle.AspNetCore

  安装成功后转到Startup类,要将swagger middle添加到请求管道,需要在startup类的ConfigureServices方法中添加swaggergen方法,

  如果要启用这个中间件,我们还需要在startup类的Configure方法中调用useswagger方法。

public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public IConfiguration Configuration { get; }
        // 该方法在运行时被调用。
        // 可以使用该方法将服务添加到容器中 例如 ASP.NET Core MVC 、 Entity Framework Core 和 Identity 
        // 更多信息配置应用程序的信息,可以查看 https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            //使用sqlserver数据库
            services.AddDbContext<TodoContext>(opt =>
               opt.UseSqlServer(Configuration.GetConnectionString("todoContext")));
            services.AddControllers();
            services.AddMvcCore();

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
            });
        }

        // 该方法在运行时被调用
        // 可以使用该方法来配置 HTTP 请求管道/用于定义请求管道中的中间件
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseSwagger();

            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
            });

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }

  输入路径:https://localhost:44320/swagger/index.html

  效果展示

  源码下载:https://pan.baidu.com/s/1oJbjC4ph8zJIkAujUExDzQ  提取码:meyl

  附PDF开发指南

  后续会陆续更新其他资料,喜欢请关注哦!。

猜你喜欢

转载自www.cnblogs.com/duhaoran/p/12661570.html