Reface.NPI 方法名稱解析規則詳解

来源:https://www.cnblogs.com/ShimizuShiori/archive/2020/04/10/12671645.html
-Advertisement-
Play Games

在上次的文章中簡單介紹了 [Reface.NPI] 中的功能。 本期,將對這方法名稱解析規則進行詳細的解釋和說明, 以便開發者可以完整的使用 [Reface.NPI] 中的各種功能。 基本規則 方法名稱以 Insert , Delete , Select , Update 開頭 方法名以數個單詞構成 ...


在上次的文章中簡單介紹了 Reface.NPI 中的功能。
本期,將對這方法名稱解析規則進行詳細的解釋和說明,
以便開發者可以完整的使用 Reface.NPI 中的各種功能。


基本規則

  • 方法名稱以 Insert , Delete , Select , Update 開頭
  • 方法名以數個單詞構成,關鍵字、欄位、操作符、參數名都是一個單詞
  • 每個單詞以大寫開頭,其餘全小寫
    • UserName 會被認作兩個單詞
    • Username 會被認作一個單詞
  • 使用入參填充 Sql參數 時,不計大小寫,你可以用 id 填充 @Id 的值

1 Insert 規則

僅使用 Insert 將使用實體中的所有欄位的值寫入。

void Insert(Entity entity);

開發者也可以通過 Without 關鍵字排除一些欄位的寫入,特別是那些依賴資料庫本身的欄位。

下麵的例子不會對 IdCreateTime 欄位寫入

bool InsertWithoutIdCreatetime(User user);

2 Delete 規則

Delete 方法名包含一個 條件規則

條件規則 允許開發者定義一個 where 子語。

2.1 使用 By 聲明一個 條件規則

要在方法名中聲明一個條件,必須以 By 作為開始。

下麵的方法,將會生成 where Id = @Id , 並以入參的 id 作為 @Id 的值。

void DeleteById(int id);

2.2 使用 AndOr 合併多個條件

你也可以使用 AndOr 合併多個條件

下麵兩個方法將會生成 where Id = @Id and/or Name = @Name 並以入參的 idname 分別作用 @Id@Name 的值。

bool DeleteByIdAndName(int id, string name)

bool DeleteByIdOrName(int id, string name)

註意

  • 因為沒有想到一個好的方法可以對條件進行分組,所以目前不可以聲明條件組,形如 where ( Id = @Id and Name = @Name ) or ( State = @State and Loginname = @Loginname )

如果您有好的想法,您也可以告訴我,共同完善 Library 。非常期待您的分享,感謝!

2.3 更多的操作符

很明顯,我們不可能總是用 = 作為條件的判斷操作,
我們還有 大於,小於,Like等等。

你可以在欄位名後面加上操作符來實現此功能。

下麵的例子會生成 where Name Like @Name 的條件。

int DeleteByNameLike(string name)

目前系統中支持的操作符有

Sql Method
= Is , Equal , Equals
> Greaterthan , Gt
>= Greaterthanandequals , Gteq
< Lessthan , Lt
<= Lessthanandequals , Lteq
Like Like , Likes
In In

2.4 自定義參數名

在上面的例子中,參數名直接與欄位名相同。

我們也可以在操作符後加上參數名來改名這個預設的參數名。

下麵的例子會生成 where Password Like @Badpassworda Or Password Like @Badpasswordb

int DeleteByPasswordLikeBadpasswordaOrPasswordLikeBadpasswordb(string badPasswordA, string badPasswordB);

3 Update 規則

Update 規則由兩個部分組成

  • 條件規則 ( 與 Delete 規則相同)
  • Set 規則

Set 規則

3.1 指定 set 的欄位

Update 關鍵字後接的部分,一直到 By 之前,都是 Set 的欄位。

下麵的例子會生成 set Password = @Password where Id = @Id

void UpdatePasswordById(int id, string password);

3.2 多個 set

你可以用 And 連接多個 set

下麵的例子會生成 set Password = @Password , Changingtime = @Changingtime where Id = @Id

bool UpdatePasswordAndChangingtimeById(int id, string password, DateTime changingTime);

3.3 自定義 set 參數

條件規則 一樣,生成的語句中,會預設使用欄位名作為參數名。

你也可以在欄位後添加 Equals 再加上 參數名稱 來自定義參數名。

下麵的例子會生成 set Count = @Newcount where Id = @Id And Count = @Oldcount

int UpdateCountEqualsNewcountByIdAndCountIsOldcount(int id, int oldCount, int newCount);

3.4 不指定 set 子句

當沒有 set 子句的時候,
會以排除了 By 子句的條件後的所有欄位作為 set 子句。

下麵的例子會生成 update [user] set name = ?, password = ? where id = ?

// User : Id, Name, Password
int UpdateById(int id, User user);

若表中還有一些欄位在 Update 時即不是條件,也不打算更新。可以使用 Without 關鍵字指定。
下麵的例子中,User 包含四個屬性

  • Id
  • Name
  • Password
  • CreateTime
// 下麵的語句不會對 CreateTime 進行更新
void UpdateWithoutCreatetimeById(int id, User user);

4 Select 規則

Select規則 包含以下三個規則

  • 條件規則 ( 與 DeleteUpdate 相同 )
  • 輸出欄位規則
  • 排序規則
  • 分頁查詢

4.1 輸出欄位

這個規則比較簡單,
只要把欄位列在 Select 後即可,
多個欄位可以用 And 連接。
輸出欄位是可選的,你可以跳過這個部分直接編寫條件。

IList<Entity> SelectIdAndNameAndCreatetime();

4.2 條件規則

UpdateDelete 一樣,使用 By 關鍵字開始條件子句

User SelectById(int id);

4.3 排序規則

4.3.1 Orderby 子句

排序規則是由關鍵字 Orderby 開頭的 ( 除了 O 都是 小寫 )。

下麵的例子會生成 ORDER BY Id Asc / Desc

IList<Entity> SelectOrderbyId();
IList<Eneity> SelectOrderbyIdDesc();

4.3.2 多個排序

多個排序不需要使用 And 連接,直接拼接即可。

IList<User> SelectOrderbyUsernameCreatetime();

4.3.3 分頁查詢

Select 方法前加上 Paging 就可以使用分頁查詢功能。

註意

  • 使用分頁查詢時,必須提供類型為 Paging 的參數。
IList<Order> PagingSelectByCreatetimeGt(DateTime createTime);

使用基於 Reface.AppStarter 開發的 Reface.AppStarter.NPI 你可以不避手動創建代理類,
只需要通過構造函數註入那些實現了 NPI 的介面,就可以直接對資料庫進行增刪改查的操作了。

在後面的文章中,會介紹 Reface.AppStarter.NPI 的功能和使用方法。


關註公眾平臺【清水潭】,可以查閱更多資料


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • A. Little Artem 題意:這一題比較簡單,簡單說一下就是給你一個n*m的矩陣,要你去塗色,其中‘B’代表黑色,‘W’代表白色,要求是兩者符合這個等式:B=W+1。 題解:簡單簽到題,但我在比賽的時候用了複雜的方法,所以耗的時間較長,賽後看到別人的解法,真的是醍醐灌頂。 代碼: 法一: # ...
  • angularjs環境中,下拉列表html代碼如下: 下拉列表的數據源結構大約如下: 現在,我們想在頁面的初始化或者一個用戶Click事件中,為這個下拉列表設置一個預設值。 方法如下: $scope.Trans_Type =1; //2,3,4,..... 當我們執行時,發現它並沒有得到預期的效果, ...
  • Tinymce版本,5.2.1 html: 取值或賦值, 方法1: 方法2: ...
  • 正在開會,突然線上站點線程數破千。然後一群人現場dump分析。 先看一眼線程運行狀態 !eeversion 發現CPU占用並不高,19%,937條線程正在運行。 看看他們都在乾什麼。 ~* e !clrstack 發現大片內容相似的,並且最後一行是System.Threading.Monitor.E ...
  • 最近項目中,一些html內容需要顯示在ng-repeat內。 1,引用angular-sanitize.js 2,寫一個過濾器 最後是在html中使用過濾器 存儲於資料庫表內的html內容: 呈現效果: ...
  • 之前的舊版本為許多客戶服務了好多年,但隨著技術變更與發展,舊版已難以再挑起大梁。因本人一直都扎根在網教行業,對實現網路考試與培訓有著深刻的認識與理解,故打算用當前主流技術全新構建一套新的版本。新版本採用Net Core 2(目前已升級為Net Core 3)c#語言編寫(新版名為“麥荻網教系統”),... ...
  • System.Drawing is not supported on this platform. ...
  • 一、引言 fanout類型的Exchange,路由規則非常簡單:它會把所有發送到該Exchange的消息,路由到所有與它綁定的Queue中。假設有一個聊天室,各個客戶端都訂閱在同一fanout exchange type,那每個客戶端發送出來的消息,所有的客戶端都能收到,因為大家都訂閱了。此時,只需 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...