ASP.NET Core WebApi + EFCore Code First(實現增刪改查,使用Swagger測試API)


EF有兩個不同版本,即Entity Framework Core 和 Entity Framework 6

EF Core:輕量級,可擴展,跨平台,參考EF6,全新平台,學習曲線小,引入一些新功能(批量刪除

EF 6 :笨重,穩定,微軟已經不打算進行大版本升級,無法跨平台。

 

如何實現EF Core功能

一、創建ASP.NET Core Web應用程序 

 

 

 

 

二、新建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     }

三、添加數據庫上下文

  選擇管理NuGet程序包

      

  選擇“瀏覽”選項卡,然后在搜索框中輸入 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; }
    }

四、注冊數據庫上下文

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

五、 安裝遷移包—通過代碼生成數據庫(sqlserver)

  打開程序包管理控制台

  輸入:Add-Migration InitDatabase

  輸入:update-database 生成數據庫

六、添加控制器

  新建文件夾>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();
        }
    } 
}

  訪問頁面為404則需要設置路由

  轉到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"
      }
    }
  }
}

七、增刪改查

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

  運行效果展示

八、使用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

  效果展示

  后續會陸續更新其他資料,喜歡請關注哦!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM