iT邦幫忙

2022 iThome 鐵人賽

DAY 10
1
Software Development

C# ASP.NET MVC實作: 30天打造屬於你的網站應用程式系列 第 10

(DAY 10)C# ASP .NET MVC實作: 30天打造屬於你的網站應用程式-使用 Entity Framework 存取與操作資料庫

  • 分享至 

  • xImage
  •  

今天來講講存取與操作資料庫方式,在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 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資料夾,完成後如下圖:

這樣就把資料庫加到專案當中了,我們先來看看資料庫裡面的內容吧~首先滑鼠點擊兩下資料庫檔案,左邊會跳出伺服器總管視窗。
點擊資料庫內的資料表後,可以看到總共有三張資料表:MemberOrderDetailProduct

在Member的地方滑鼠點2下,會開啟資料表定義內容,包含這張表的欄位名稱、資料型別(長度限制)、值是否可以為null等等。

在Member的地方按滑鼠右鍵,點選「顯示資料表資料」,就可以看到裡面已經有建入了3筆的資料內容。

另外2張資料表一樣有先新增幾筆資料內容在其中,可以自行看看,那麼資料庫的部分就暫時先瞭解到這邊即可。

● 使用EntityFramework加入資料庫Model

接著說明使用EntityFramework的方式,步驟如下:

  1. 在Model資料夾按滑鼠右鍵,按「加入」 → 「新增項目」,選擇「ADO .NET實體資料模型」(可利用關鍵字快速搜尋),將模型名稱命名為「dbShopping」,然後按下「新增」。

  2. 選擇「來自資料庫的EF Designer」,並按「下一步」。

  3. 資料連接部分按照預設即可,按「下一步」。

  4. EntityFramework版本照預設選擇6.x,按「下一步」。

  5. 資料庫物件勾選「資料表」,其底下的所有資料表皆會被一同勾選,其他照預設即可,選擇後按下「完成」。

  6. 完成後就可以看到Model資料夾已經建立好實體資料庫模型囉!

    如果有出現如下圖的安全性警告,可以直接按「確定」執行以及勾選「不要再顯示此訊息」避免重複跳出警告。

●範例-使用資料庫模型顯示資料

建立好模型後,我們用一個簡單的範例來看,假設我想要將OrderDetail裡面的資料顯示出來該如何做呢?參考以下步驟進行:

  1. 首先我們一樣先建立一個新的Controller,取名叫ShoppingController,建立後如下圖:

  2. 必須先建立資料模型的實體物件才能操作資料,所以先將Index()方法內修改成下列Code:

        public ActionResult Index()
        {
            var db = new dbShoppingEntities();//建立資料模型實體物件

            return View();
        }
  1. 接著就看要取得db物件內的什麼內容了,我們這邊要的是OrderDetail,為了方便View使用把它轉成List集合,Code如下:
        public ActionResult Index()
        {
            var db = new dbShoppingEntities();
            var model = db.OrderDetail.ToList();
            return View(model);
        }
  1. 新增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>
  1. 執行結果如下:

● 條件查詢:使用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功能,那就明天見啦~

※小弟不才,在軟體的世界還只是個小菜雞,如果內容有任何謬誤或問題,還請各位大神前輩們多多批評指教~歡迎下方留言討論^^


上一篇
(DAY 9)C# ASP .NET MVC實作: 30天打造屬於你的網站應用程式-資料驗證
下一篇
(DAY 11)C# ASP .NET MVC實作: 30天打造屬於你的網站應用程式-簡易CRUD
系列文
C# ASP.NET MVC實作: 30天打造屬於你的網站應用程式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言