0%

前提情要

筆者這篇主要是想寫實體產生器的進階版本,怎麼會說是進階版本呢,若有用過EFCore的dotnet ef dbcontext scaffold指令會知道,預設會是符合C#命名規則,即Pascal Case,每個英文單字連在一起,每個單字的第一個字為大寫。scaffold指令還特別開放options:-use-database-names,即可保留其資料庫中的命名。

筆者當初也沒有特別注意這些細節,因為是有踩過一些雷,例:製作前端使用ViewModel時,從上述scaffold指令產出的Entities複製其對應的屬性宣告,再補一些額外的屬性,然後透過Dapper套件Binding屬性時發現,怎麼有些屬性明明資料庫就有回傳,怎麼沒有binding成功,仔細一看,資料庫端是使用下底線,到C#端時scaffold會把下底線去掉,因此直接從Entities中複製貼上則會是不一樣的屬性名稱,自從那一次後,就注意到該細節。

講到此篇主題,剛好手邊新專案,資料庫使用MySQL,筆者想保持資料庫命名規則,主要是有兩點

  • 小寫為主
  • 每個單字透過下底線連結

另一方面,筆者透過SqlSugarCore提供的實體產生相關API產生相關實體時,又想保持C#命名規則,最好是跟EFCore scaffold一樣可以保有複數機制,這為此篇主要解決目的。

閱讀全文 »

前提情要

以上篇[DotnetCore]CleanArchitecture手做系列-建立專案實作完成後,得到一個有整潔架構的方案,筆者在這篇以webapi template所產生的WeatherForecast API查詢作業轉成MediatR風格的架構,筆者主要參考https://github.com/jasontaylordev/CleanArchitecture專案預設範本所產生的撰寫風格,擷取筆者要的部份,ORM部份則改用SqlSugarCore實作資料庫操作行為,此篇以webapi template所產生的WeatherForecastController改寫成Clean Architecture撰寫風格。

閱讀全文 »

前提情要

筆者這邊有一個需求是,pdf檔案在上傳時就判斷好是否有加密,避免後面流程中需要解析pdf檔案時,遇到解密的問題,因此為避免後面流程複雜去防呆,直接於上傳檔案時築一道防線擋掉,是最佳解。筆者在搜尋了一下c# detect password protected pdf的關鍵字時,基本上會跳出使用iTextSharp的解法,筆者就參考此解法寫一個Extension,主要都是參考StackOverFlow的解法,程式碼本身沒甚麼變動,此篇以解釋為準。

閱讀全文 »

前提情要

筆者這篇主要是以https://github.com/jasontaylordev/CleanArchitecture的`template`架構,因`template`產出之專案結構包含`Identity Server,還有前端頁面等不需要的專案,因此筆者想要仿照該template架構,自己手動建立純API架構,順便熟悉一下其Clean Architecture`的專案結構,才能知己知彼,百戰百勝阿。此篇就以筆者手動建立的過程,筆者懶得截圖,主要以指令碼的方式進行相關建置作業。

閱讀全文 »

前提情要

一個應用程式,尤其是前端少不了alert訊息啦,網頁系統,基本上就可以使用alert方法可以跳出提示訊息,純網頁應該是不會有違合感,但想像一下以PC App的形式來說,直接跳網頁的那種alert訊息,似乎不太搭,通常一個系統一定會搭配一套toastr的套件,將成功、失敗訊息顯示於左上、右上、左下、右下角,清楚地告訴使用者,他的操作是否成功或失敗。

筆者認為toastr的基本要素就是至少要有成功失敗樣式可以選擇,以及剛提到的訊息置於左上、右上、左下、右下角等選項,再則進階一點就是訊息內容本身要支援,html格式訊息一般文字訊息,才可以靈活運用。這篇的前提條件跟前幾篇一樣,筆者想要找到一個Vanilla jsToastr套件,這篇主要是要介紹筆者挑到在使用的https://apvarun.github.io/toastify-js/

閱讀全文 »

前提情要

筆者公司其他同仁負責的專案有一個需求是,主動幫使用者的信件內容讀取,依照附件檔案中的檔案內容做不同的事情,而不用人工的方式到系統中上傳該附件檔案。這時候就該使出Reader系列文章的時候了,前置作業可能要靠其他Infra同仁設定好後將信件自動轉成EML檔案格式,放置於網路空間上,由EML Reader會去讀取該路經中的EML檔案,並做對應的事,該篇就以讀取EML檔案格式內容為主作呈現。

閱讀全文 »

前提情要

筆者寫Blog有一段時間了,去年買了自己的名字域名後,一直沒空去設定它,一直都使用github io預設的域名,上週終於有空來設定了。筆者買很夯的.me結尾的域名,剛好歐洲的一個小國家的代碼為me,筆者這邊買的自然就是https://eugenesu.me了。筆者這篇以整個設定到生效的過程一一介紹,若以筆者一樣使用hexo當blog生產工具,且想要將自己的github page掛上域名的,可以參考使用。

閱讀全文 »

前提情要

前提情要請參考[DotnetCore]泛型運用系列-Model設計篇,不過筆者還是在這邊再列一下會用到的技術觀念與套件:

  • AutoMapper:運用於將檔案內容對應的物件轉成EFCore的物件時
  • Generic Class/Method: 不想寫多個Service去處理多個檔案,設計成泛型形式以符合各種檔案類型
  • Attribute: 透過Description Attribute,註記其對應的Comlumn欄位順序
  • Coravel:透過該套件,將寫好的Service掛成排程任務
  • Extension Method:有一些通用的Method,不要落落等塞在一個Service中,因此轉換成可以共用的Extension Method
  • EFCore:資料存取用開發套件
閱讀全文 »

前提情要

前提情要請參考[DotnetCore]泛型運用系列-Model設計篇,不過筆者還是在這邊再列一下會用到的技術觀念與套件:

  • AutoMapper:運用於將檔案內容對應的物件轉成EFCore的物件時
  • Generic Class/Method: 不想寫多個Service去處理多個檔案,設計成泛型形式以符合各種檔案類型
  • Attribute: 透過Description Attribute,註記其對應的Comlumn欄位順序
  • Coravel:透過該套件,將寫好的Service掛成排程任務
  • Extension Method:有一些通用的Method,不要落落等塞在一個Service中,因此轉換成可以共用的Extension Method
  • EFCore:資料存取用開發套件
閱讀全文 »

前提情要

前提情要請參考[DotnetCore]泛型運用系列-Model設計篇,不過筆者還是在這邊再列一下會用到的技術觀念與套件:

  • AutoMapper:運用於將檔案內容對應的物件轉成EFCore的物件時
  • Generic Class/Method: 不想寫多個Service去處理多個檔案,設計成泛型形式以符合各種檔案類型
  • Attribute: 透過Description Attribute,註記其對應的Comlumn欄位順序
  • Coravel:透過該套件,將寫好的Service掛成排程任務
  • Extension Method:有一些通用的Method,不要落落等塞在一個Service中,因此轉換成可以共用的Extension Method
  • EFCore:資料存取用開發套件
閱讀全文 »