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
效果展示
后續會陸續更新其他資料,喜歡請關注哦!