今天來講講存取與操作資料庫方式,在DAY 5的時候有個範例是將Model資料傳至View顯示,那時候我們是直接在方法內建立幾個Member
物件,再將物件加入到List
裡面作為資料來源。
public ActionResult ShowMembers()
{
var memberA = new Member() { Id = 1, Name = "Alex", Age = 12 };
var memberB = new Member() { Id = 2, Name = "Ben", Age = 34 };
var memberC = new Member() { Id = 3, Name = "Carol", Age = 56 };
var memberList = new List<Member>() { memberA, memberB, memberC };
return View(memberList);
}
@using MyFirstWebApp.Models
@model IEnumerable<Member>
@{
ViewBag.Title = "ShowMembers";
}
<h2>ShowMembers</h2>
<div>
@{
foreach (var member in Model)
{
<label>會員編號:</label> @member.Id
<br />
<label>會員姓名:</label> @member.Name
<br />
<label>年齡:</label> @member.Age
<hr />
}
}
</div>
但實務上資料通常都是存在資料庫裡面,資料庫裡面會有許多資料表,資料表內則會有一筆一筆的資料,顯示方式如下面形式:
編號 | 姓名 | 性別 | 年齡 | 職業 | 已婚 |
---|---|---|---|---|---|
1 | AAA | 男 | 43 | 商 | 是 |
2 | BBB | 男 | 24 | 公 | 否 |
3 | CCC | 女 | 54 | 商 | 否 |
4 | DDD | 男 | 16 | 學生 | 否 |
5 | EEE | 女 | 65 | 無 | 是 |
6 | FFF | 女 | 32 | 教 | 是 |
7 | GGG | 其他 | 27 | 軍 | 否 |
那麼在ASP .NET MVC中該如何透過使用者的操作,來達成操作資料庫的內容呢?這就要講到今天的重點:Entity Framework
ADO .NET是微軟在.NET Framework中負責資料存取的類別庫集,它可以讓.NET上的任何程式語言能夠連接並存取關聯式資料庫與非資料庫型資料來源(例如XML,Excel或是文字檔資料)。而Entity Framework 是ADO .NET中的開發框架,也是 .NET Framework中的一套程式庫,只要電腦有安裝 .NET Framework 3.5 SP1以上版本就能使用。
簡單來說,ADO .NET架構用來存取與管理資料庫,使用其底下Entity Framework的優點在於開發時可以用更直覺、簡潔的程式碼來處理資料庫資料,開發人員只需要以物件導向程式設計搭配LINQ語法查詢就可以存取資料來源。
最後放一下Microsoft官方的連結說明,有興趣可以閱讀。
https://docs.microsoft.com/zh-tw/dotnet/framework/data/adonet/ef/overview
為了把重點聚焦在EntityFramework的使用方式,資料庫的部分就用現成的Database檔案來操作,可以先到下面連結下載我放的db檔案:
https://github.com/mysagittarius1/DataBase/blob/main/EnitityFramework/dbShopping.mdf
下載後應該會看到名為dbShopping
的.mdf
檔,接著我們新建一個ASP .NET MVC的專案,方案名稱叫做「DemoEntityFramework」,完成後將下載的dbShopping檔案拖曳加入到方案總管底下的App_Data資料夾,完成後如下圖:
這樣就把資料庫加到專案當中了,我們先來看看資料庫裡面的內容吧~首先滑鼠點擊兩下資料庫檔案,左邊會跳出伺服器總管視窗。
點擊資料庫內的資料表後,可以看到總共有三張資料表:Member
、OrderDetail
、Product
。
在Member的地方滑鼠點2下,會開啟資料表定義內容,包含這張表的欄位名稱、資料型別(長度限制)、值是否可以為null等等。
在Member的地方按滑鼠右鍵,點選「顯示資料表資料」,就可以看到裡面已經有建入了3筆的資料內容。
另外2張資料表一樣有先新增幾筆資料內容在其中,可以自行看看,那麼資料庫的部分就暫時先瞭解到這邊即可。
接著說明使用EntityFramework的方式,步驟如下:
在Model資料夾按滑鼠右鍵,按「加入」 → 「新增項目」,選擇「ADO .NET實體資料模型」(可利用關鍵字快速搜尋),將模型名稱命名為「dbShopping」,然後按下「新增」。
選擇「來自資料庫的EF Designer」,並按「下一步」。
資料連接部分按照預設即可,按「下一步」。
EntityFramework版本照預設選擇6.x,按「下一步」。
資料庫物件勾選「資料表」,其底下的所有資料表皆會被一同勾選,其他照預設即可,選擇後按下「完成」。
完成後就可以看到Model資料夾已經建立好實體資料庫模型囉!
如果有出現如下圖的安全性警告,可以直接按「確定」執行以及勾選「不要再顯示此訊息」避免重複跳出警告。
建立好模型後,我們用一個簡單的範例來看,假設我想要將OrderDetail裡面的資料顯示出來該如何做呢?參考以下步驟進行:
首先我們一樣先建立一個新的Controller,取名叫ShoppingController
,建立後如下圖:
必須先建立資料模型的實體物件才能操作資料,所以先將Index()
方法內修改成下列Code:
public ActionResult Index()
{
var db = new dbShoppingEntities();//建立資料模型實體物件
return View();
}
db
物件內的什麼內容了,我們這邊要的是OrderDetail
,為了方便View使用把它轉成List集合,Code如下: public ActionResult Index()
{
var db = new dbShoppingEntities();
var model = db.OrderDetail.ToList();
return View(model);
}
Index()
方法的View頁面,Code如下:@using DemoEntityFramework.Models
@model IEnumerable<OrderDetail>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<table class="table table-hover">
<thead>
<tr>
<td>@Html.DisplayNameFor(m=>m.OrderGuid)</td>
<td>@Html.DisplayNameFor(m => m.UserId)</td>
<td>@Html.DisplayNameFor(m => m.ProductName)</td>
<td>@Html.DisplayNameFor(m => m.Price)</td>
<td>@Html.DisplayNameFor(m => m.Quantity)</td>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.OrderGuid</td>
<td>@item.UserId</td>
<td>@item.ProductName</td>
<td>@item.Price</td>
<td>@item.Quantity</td>
</tr>
}
</tbody>
</table>
LINQ
方法語法假如實際上的資料筆數有好幾千筆,而我們只想要看到符合特定條件的內容的話,這時候就可以使用LINQ
查詢語法。比如上面的範例中,如果只想要顯示[UserId是"Bonny456" 且 金額大於50]
的資料,就可以寫成下列Code:
public ActionResult Index()
{
var db = new dbShoppingEntities();
var model = db.OrderDetail.Where(m => m.UserId == "Bonny456" && m.Price > 50).ToList();
return View(model);
}
執行結果如下:
今天的內容就到這,明天會延續今天的資料庫範例來製作簡單的CRUD功能,那就明天見啦~
※小弟不才,在軟體的世界還只是個小菜雞,如果內容有任何謬誤或問題,還請各位大神前輩們多多批評指教~歡迎下方留言討論^^