1.環境准備就不說怎么弄了,自行下載VS2017版本以上就行了,這里建議下載VS2019使用,如果下載下來后沒有對應版本的SDK。
可自行到 傳送門 微軟官方的SDK下載需要的版本進行安裝。
2.打開編譯器新建項目,選擇ASP.NET Core Web應用程序,點擊下一步
輸入項目名稱后,點擊創建。
這里選擇使用core 2.2 選擇API,點創建,到這里就把一個空的webapi項目創建完成了,接下來我們需要創建一個基本的項目目錄。這里就我目前接觸的項目和自己的理解分的層級結構。
在項目解決方案上右鍵-添加-新建項目- 找到core的類庫然后選擇創建。最終的項目目錄結構如下:
項目目錄結構說明:
- Baisc主要存放一些通用方法以及底層常用操作的類(如日志、緩存等),或接口、擴展方法等。
- Biz主要是MVC結構中的業務處理層。
- Controls是我們項目的控制器層,所有與前端交互的接口都應放在該類庫中,每一模塊對應一個controller。
- CoreMvc主要存放過濾器、與前端交互模型、基類控制器、中間件的類庫
- Dao層主要用於與數據庫交互,將數據返回給業務層處理
- Modes存放自定義模型與數據庫模型。
- 啟動程序,主要的一些配置都在該類庫中的Startup中進行配置
項目骨架弄完了之后,得考慮如何與數據庫和前端進行交互。 數據庫交互采用EF Core Code First的方式進行,步驟如下
在Dao層添加相關依賴:Microsoft.EntityFrameworkCore.SqlServer,Microsoft.EntityFrameworkCore.Tools。 csproj文件如下
<ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.6" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.6"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> </ItemGroup>
- 在models層中添加一個demo模型:
using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace DemoFrame_Models.Entitys { [Table(name: "Demo_Model")] public class DemoModel { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)]//不自動增長 使用IdWorker生成 public long Id { get; set; } /// <summary> /// 用戶真實姓名 /// </summary> public string CustomerName { get; set; } /// <summary> /// 證件類型:1 身份證,2 軍官證,3 護照 /// </summary> [DefaultValue(1)] public int IdentityCardType { get; set; } } }
- 添加數據庫上下文:
using DemoFrame_Models.Entitys; using Microsoft.EntityFrameworkCore; namespace DemoFrame_Dao { /// <summary> /// 數據庫上下文 /// </summary> public class DemoDbContext : DbContext { public DemoDbContext(DbContextOptions<DemoDbContext> options) : base(options) { } public DbSet<DemoModel> Blogs { get; set; } } }
- 在Startup添加如下代碼:在ConfigureServices中添加
services.AddDbContext<DemoDbContext>(options => options.UseSqlServer("Server=.;Database=EFDemo;uid=sa;pwd=123456;"));
在 Configure 方法中加上
try { if (env.IsDevelopment()) { using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>() .CreateScope()) { var database = serviceScope.ServiceProvider.GetService<DemoDbContext>().Database; database.EnsureDeleted();//每次刪除庫重建 database.EnsureCreated();//這里是為后面的解耦做鋪墊 } } } catch (Exception ex) { //LogHelper.Logger.Error(ex, "Failed to migrate or seed database"); }
- 測試一下,在啟動類庫中Controllers文件夾有個valuesController類,將前面的內容替換成如下代碼:
private readonly DemoDbContext _context; public ValuesController(DemoDbContext context) { _context = context; } // GET api/values [HttpGet] public ActionResult<IEnumerable<string>> Get() { _context.DemoModel.Add(new DemoModel() { Id = 1, CustomerName = "levy", IdentityCardType = 1, }); var res = _context.SaveChanges(); return new string[] { "value1", res +"" }; } // GET api/values/5 [HttpGet("{id}")] public ActionResult<DemoModel> Get(long id) { return _context.DemoModel.Find(id); ; }
程序啟動會自動運行到api/values接口上,插入數據。因為在啟動配置文件launchSettings.json中"launchUrl": "api/values"
- 接下來我們再跑https://localhost:44304/api/values/1,就能得到剛剛插入的數據了。
在下一篇中將介紹如何通過autofac實現EF Core code first無需寫dataset也可生成表,只用添加實體類就行。
有需要源碼的可通過此 GitHub 鏈接拉取 覺得還可以的給個 start 哦,謝謝!