【Side Project】 菜单内容2-ORM( SqlSugar)

昨天把我们的资料库架好了,
今天我们接着把专案连上资料库吧。

建立新资料

  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,
先将功能投入这边,没问题後再投入专案。
这样不仅不会降低开发时程,反倒在之後要维护的时候可以提供不少的帮助。


<<:  Day 25 - Socket的实际应用

>>:  [Day23] 在 Codecademy 学 React ~ Component Lifecycle 生命周期我不懂你QQ

Day.7 深入理解动态连结

为甚麽会出现动态连结? 动态连结出现的原因就是为了解决静态连结中提到的两个问题: 浪费空间,因为每个...

【Day 07】- 恶搞行程(Process)、键盘(Keyboard)大作战之序章

Agenda 资安宣言 序 系列与规划 下期预告 资安宣言 撰写本系列文章目的在於提升资讯安全之实务...

Day24 axios基本语法(GET、POST请求)?

大家好我是乌木白!今天要和大家讲 axios 基本语法~ 在处理 AJAX 的时候,有一些套件可以...

Day 13 - 物品借用纪录系统 (3) 程序码解说

今天主要是来补足 Day11 和 Day12 简(ㄏㄨㄚˊ)约(ㄕㄨㄟˇ)的部分。 我们会讲两个东西...

总结 DAY30 耶 成功啦~~

第一次参加铁人赛 非常的开心又紧张啊(害怕自己写错哈哈) 不过总觉得每日发文会上瘾 虽然可能没人会看...