iT邦幫忙

2021 iThome 鐵人賽

DAY 12
3
自我挑戰組

【Side Project】 系列 第 12

【Side Project】 菜單內容2-ORM( SqlSugar)

  • 分享至 

  • xImage
  •  

昨天把我們的資料庫架好了,
今天我們接著把專案連上資料庫吧。

建立新資料

  1. 開啟SSMS(登入帳號)
  2. 在資料庫內新增幾筆資料
    SQL語法:
begin tran
insert into menu (item,price) values('牛肉炒飯',70)
insert into menu (item,price) values('蝦仁炒飯',70)
insert into menu (item,price) values('肉絲炒飯',70)
select * from menu
commit tran

https://ithelp.ithome.com.tw/upload/images/20210925/20115941uqQDnoLgaG.jpg
因為我們昨天在建立資料表的時候有給他識別欄位,所以當我們在建立資料的時候,
他會自動幫我們編號。

專案中加入SqlSugar

SqlSugar是一個幫忙我們處理跟SQL連線的套件,
可以讓我們程式設計師更方便的去跟資料庫做連接。
另一個,也是選擇SqlSuar最重要的原因,
因為他有中文文件,這可以大大降低我們學習的難度。
(官方網站)

  1. 開啟專案
  2. 工具 > NuGet套件管理員 > 管理方案的NuGet套件
    https://ithelp.ithome.com.tw/upload/images/20210925/20115941NnelCa2BHx.jpg
  3. 瀏覽 > 輸入 "Sugar" > 選第一個 安裝(ver 5.04)
    https://ithelp.ithome.com.tw/upload/images/20210925/20115941c9rRRbnOZx.jpg
    稍等數秒後會跳出視窗,反正不是按下接受就是確定就對了。

測試專案連接資料庫

做DTO的需要用到的Data Class

DTO(Data Transfer Object),就是將我們的資料轉成物件。
讓我們在程式中操作比較方便,也能透過IDE 自動幫我們偵錯避免打字上的錯誤。

  1. 新增 資料夾 DTOClass
    https://ithelp.ithome.com.tw/upload/images/20210925/201159415L0DYwMzDR.jpg
  2. 新增 Menu.cs
    https://ithelp.ithome.com.tw/upload/images/20210925/20115941CY30I1Jld1.jpg
    3.在Menu.cs 寫入我們Table所對應的欄位
    程式碼:
  public class Menu
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Uid { get; set; }
        public string Item { get; set; }
        public int Price { get; set; }
    }

https://ithelp.ithome.com.tw/upload/images/20210925/20115941zmBLHGEDVp.jpg
如何對應欄位的方式就上(官方網站)看他的介紹囉。

做連線測試

一般來說,要做一些測試的時候,
我們會另外開發一套診斷軟體(diagnostic software ),
用來測試/監測我們一些功能是否正常及其效能,
不過這邊就省麻煩,直接在程式必經的流程中加入我們要測試的程式碼。

  1. 打開HomeController.cs
  2. Customer() 裡面輸入程式碼
    程式碼:
public IActionResult Customer()
        {
            //連線設定
            SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
            {
                //連線字串
                ConnectionString = "Server=.\\SQLEXPRESS;Initial Catalog=WebMenu;user id=webmenu;password=xxxxxxxx;Integrated Security=False",
                DbType = DbType.SqlServer,//連線類型
                IsAutoCloseConnection = true //自動關閉連線
            });
            //當執行時,觸發事件
            db.Aop.OnLogExecuting = (sql, pars) =>
            {
                Console.WriteLine(sql);//查看SQL語法
            };

            var list = db.Queryable<Menu>().ToList();
            foreach(var menu in list){
                Console.WriteLine(menu.Item);
            }
            return View();
        }

https://ithelp.ithome.com.tw/upload/images/20210925/20115941dAey7Vwl8I.jpg
(p.s. 連線字串裡面的帳號密碼,要使用當初自己設置的帳號密碼喔)
3. 打開網頁
4. 點 顧客-點菜單
https://ithelp.ithome.com.tw/upload/images/20210925/20115941IZrb6s5VVk.jpg
這步動作是為了讓程式可以執行到Customer()
5. 在Visial Studio 裡面的輸出 > ASP.Net Core 網頁伺服器
檢查我們打印出來的內容
https://ithelp.ithome.com.tw/upload/images/20210925/20115941uOH7c8QR0Y.jpg
紅色框部分第一列是我們下的SQL指令,後面則是我們寫在資料庫的商品名稱。

結語

因為我們的專案是面對客戶的軟體,而不是工具,
所以在開發的時候要在合理的情況下,
盡可能的提升我們開發的效率,
而不是一味的追求,開發上的自由度(全部都自己來)。

對於ORM的使用有幾個Tips

  1. 如果有太多複雜語法的專案不要用
  2. 考慮效能的時候不要用
  3. 前輩說不要用的時候不要用

太過於複雜的sql語法使用orm提供的語法有時不易完成,
與其一下寫原生語法一下不使用,不如統一不要用。
雖然大多數時候ORM都能提供最佳解,不過ORM提供的語法不容易修改,
當遇到一些無法解決的問題的時候,又會需要變回原生語法,
所以如果有此類問題,也建議直接不要用。
最後一點也是跟第一點一樣,考慮到整體程式統一風格,
不要一意孤行的使用自己的開發方式,多去配合別人的開發。

有些人會問,為什麼不直接把連線功能寫進去網頁上。
很多開發者都會忽略投入功能前的測試,
這會導致之後把功能投入專案之後發生問題很難找出原因。
所以在開發之餘如果有時間的話,可以開發一套diagnostic software,
先將功能投入這邊,沒問題後再投入專案。
這樣不僅不會降低開發時程,反倒在之後要維護的時候可以提供不少的幫助。


上一篇
【Side Project】 菜單內容(建立資料庫)
下一篇
【Side Project】 菜單內容3-畫面資料綁定
系列文
【Side Project】 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言