前言
做程式開發,不管是什麼語言什麼資料庫,其中的ORM(物件關係對映)是必不可少的,但是不管選擇哪一種ORM,都需要了解其中的執行機制,配置幫助類等等。
所以很多ORM都開始進行升級封裝,我們只需要引用即可,可謂是開箱即用,特別是對於初學者來說,快速建站不是夢。
PS:知其然而不知其所以然是不行的,要理解其中的執行機制和原理,不要為了寫程式碼而寫程式碼。
今天他來了,EFCore (Entity FraFramework Core)
Entity Framework Core (EF Core) 是適用於 .NET 的新式物件資料庫對映器。 它支援 LINQ 查詢、更改跟蹤、更新和架構遷移。
EF Core 通過資料庫提供程式外掛模型與 SQL Server/Azure SQL 資料庫、SQLite、Azure Cosmos DB、MySQL、PostgreSQL 和更多資料庫配合使用。
三步實現資料庫互動
1、建立專案
建立一個 ASP .Net Core Web API 專案,命名為 EFCore_NetCoreWebApi (自定義命名,你可以起一個合適的名字),版本選擇 Net Core 3.1,
資料庫是 SqlServer,當然,其他資料庫也是可以的,不影響操作,很方便。
2、引入NuGet包並建立上下文物件
這裡只需要兩個包,一個是EFCore的引用包,一個是資料庫連線的引用包。
在NuGet分別引入下面兩個包,
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer
建立上下文物件
在專案裡面建立一個 EntityDbContext 資料夾,然後在資料夾裡面建立一個 DbContext_first 類,並繼承 EFCore框架中的 DbContext,
在 EntityDbContext 資料夾下建立 Entity 資料夾,建立 StudentTable 實體對映。如下展示
PS:(注意,這裡預設是資料庫存在StudentTable表的,如果沒有請先建立,EFCore支援實體對映表到資料庫的,這裡就不體現了,有需要了解的自行百度或私信小編)
using EFCore_NetCoreWebApi.EntityDbContext.Entity; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace EFCore_NetCoreWebApi.EntityDbContext { public class DbContext_first: DbContext { /// <summary> /// 在這裡重寫OnConfiguring的方法來配置資料庫的連線字串 /// </summary> /// <param name="optionsBuilder"></param> protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { //SQL Server/Azure SQL 資料庫、SQLite、Azure Cosmos DB、MySQL、PostgreSQL資料庫連線 optionsBuilder.UseSqlServer("Data Source=DESKTOP-Q1V1K53\\MSSQLSERVER2012; Initial Catalog=Demo;User Id=sa;Password=0000@CIICSH"); } public DbSet<StudentTable> StudentTable{ get; set; } //需要操作的資料庫對應的表 } }
為了很好的展示,配置連線我寫在程式碼裡,後續可放到配置檔案,注意,NetCore3.1的配置檔案讀取方式和以往不同,注意甄別,如下,需要檢視的點選程式碼,不需要的可以跳過。
1、首先在控制器引入讀配置檔案物件 private readonly IConfiguration _IConfiguration; public ThirdController(IConfiguration IConfiguration) { _IConfiguration = IConfiguration; } 2、然後讀取 var AllowedHosts = this._IConfiguration["AllowedHosts"]; var write = this._IConfiguration["ConnectionStrings:DbWrite"]; var write0 = this._IConfiguration["ConnectionStrings:DbWrite:0"]; var readarray = this._IConfiguration.GetSection("ConnectionStrings").GetSection("DbReads").GetChildren().Select(a => a.Value).ToArray(); 3、配置檔案的格式(看需求配置) { "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "ConnectionStrings": { "DbWrite": "Server=.;Database=LhHt6;Persist Security Info=True;User ID=sa;password=Sasa123;MultipleActiveResultSets=true", "DbReads": [ "Server=.;Database=LhHt6;Persist Security Info=True;User ID=sa;password=Sasa123;MultipleActiveResultSets=true", "Server=.;Database=LhHt6;Persist Security Info=True;User ID=sa;password=Sasa123;MultipleActiveResultSets=true", "Server=.;Database=LhHt6;Persist Security Info=True;User ID=sa;password=Sasa123;MultipleActiveResultSets=true" ] }, "AllowedHosts": "*" }
展示一下建立好後的目錄層級
3、編寫幾行程式碼
在 Controllers 資料夾下建立一個 StudentController 控制器,並配置路由,編寫程式碼,如下:
using EFCore_NetCoreWebApi.EntityDbContext; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace EFCore_NetCoreWebApi.Controllers { [Route("api/[controller]")] [ApiController] public class StudentController : Controller { //查詢 [HttpGet("GetStudentList")] public JsonResult GetStudentList() { using (var ctx=new DbContext_first()) { var studeltList = ctx.StudentTable.ToList(); return Json(studeltList); } } } }
然後我們訪問http://localhost:44571/api/Student/GetStudentList 就查詢到資料了,成功互動 ,除錯檢視一下。
到這裡就完成了資料庫互動了,是不是超少的程式碼,超簡單的邏輯。其他的增刪改一樣的,我們展示一下新增的例子,修改刪除的就不展示了,需要具體瞭解的可以私信或評論區留言。
//增加 [HttpGet("StudentInsert")] public string StudentInsert() { using (var ctx = new DbContext_first()) { int count = 0; List<StudentTable> modelList = new List<StudentTable>(); StudentTable model = new StudentTable(); model.Name = "喜洋洋"; model.Sex = "男"; model.Age = 10; model.ClassName = "發明三班"; model.CreateTime = DateTime.Now; ctx.Add(model); //單個新增 count = ctx.SaveChanges(); //提交資料庫互動 //modelList.Add(model); //ctx.AddRange(model); //批量新增 //count = ctx.SaveChanges(); //提交資料庫互動 return count > 0 ? "新增成功" : "新增失敗"; } }
總結
對接進來很簡單,使用也很方便,但是對於複雜sql語句(跨伺服器跨庫多表的查詢)或其他業務場景不滿足怎麼辦?
這個時候就會考慮使用sql語句的方式會不會比較好,呼叫儲存過程是不是更優?在不引入第三方的情況下可以使用ado.net的方式來進行補位,比如:
//sql連線
string connectionString = "Data Source=DESKTOP-Q1V1K53\\MSSQLSERVER2012; Initial Catalog=Demo;User Id=sa;Password=0000@CIICSH"using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); string sql = ""; sql = "INSERT INTO StudentTable VALUES('灰太狼','男','20','發明三班',GETDATE())"; using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.ExecuteNonQuery(); } conn.Close(); conn.Dispose(); }
歡迎關注訂閱微信公眾號【熊澤有話說】,更多好玩易學知識等你來取
作者:熊澤-學習中的苦與樂 公眾號:熊澤有話說 出處:https://www.cnblogs.com/xiongze520/p/15049031.html 創作不易,任何人或團體、機構全部轉載或者部分轉載、摘錄,請在文章明顯位置註明作者和原文連結。
|