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

摘要:
选中右侧窗格中的“项目”复选框,然后选择“安装”。使用以上说明添加Microsoft。再次安装EntityFrameworkCore在两个NuGetsInMemory安装完成后,在Models中创建一个新的TodoContext类。publicclassTodoContext:DbContext{publicTodoContext:base{}publicDbSet<TodoItem>TodoItems{get;set;}}4.在appsettings中注册数据库上下文在json启动配置文件中,创建连接到sqlserver数据库的语句“ConnectionStrings”:{“todoContext”:“server=.;database=TodoDatas;uid=sa;pwd=123456”}转到startup类,实现startup类的构造方法,并注册数据库上下文publicclassStartup{publicStartup}configuration=configuration;}在ConfigureServices publicIConfigurationConfiguration{get;}//中此方法在运行时调用。

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

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

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

如何实现EF Core功能

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

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

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

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程序包

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

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

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

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

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

  两个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();
        }

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

            app.UseRouting();

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

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

  打开程序包管理控制台

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

  输入:Add-Migration InitDatabase

  输入:update-database 生成数据库

6、添加控制器

  新建文件夹>Controllers

  在Controllers里添加TodoController控制器

namespace TodoApi.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"
      }
    },
    "TodoApi": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

7、增删改查

namespace TodoApi.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}")]
        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();
            }
        }
    }
}

  运行效果展示

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

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

  效果展示

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

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

免责声明:文章转载自《ASP.NET Core WebApi + EF Core(实现增删改查,使用Swagger测试API)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇hprose for php最小二乘法小结下篇

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

相关文章

swift3.0 CoreGraphics绘图-实现画板

swift3.0对绘图的API进行了优化,看起来更swift了。 看下UI的构造。设置画笔粗细、清空面板和保存到本地 下面直接看画板文件 这里我做的比较复杂,记录触摸到的每个点,再连成路径,其实直接用可变路径CGMutablePath可变路径就可以实现。 成员变量 public var lineWidth:CGFloat = 1 file...

MyVoix2.0.js 源码分析 WebSpeech与WebAudio篇

楔 子   随着移动互联网时代的开启,各种移动设备走进了我们的生活。无论是日常生活中人手一部的手机,还是夜跑者必备的各种智能腕带,亦或者是充满未来科技感的google glass云云,它们正渐渐改变着我们的生活习惯以及用户交互习惯。触摸屏取代了实体按键,Siri开始慢慢释放我们的双手,而leap motion之类的硬件更是让我们彻底不需要接触IT设备便能通...

Nginx超时timeout配置总结

具体参数解释 Nginx 处理的每个请求均有相应的超时设置。如果做好这些超时时间的限定,判定超时后资源被释放,用来处理其他的请求,以此提升 Nginx 的性能。 keepalive_timeout HTTP 是一种无状态协议,客户端向服务器发送一个 TCP 请求,服务端响应完毕后断开连接。如果客户端向服务器发送多个请求,每个请求都要建立各自独立的连接以传输...

Android 手动显示和隐藏软键盘

1、方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示) InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);   imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_...

Android显示GIF图片

今天我们研究一下怎样在Android手机上显示GIF动态图片 首先须要在src文件夹下新建一个自己定义的View。代码例如以下: </pre><pre name="code" class="java"> </pre><pre name="code" class="java"> import android...

ASP.NET WebApi总结之自定义权限验证

在.NET中有两个AuthorizeAttribute类, 一个定义在System.Web.Http命名空间下 #region 程序集 System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 // E:srcpackagesMicrosoft.A...