添加→ 方法參數中有一個有關添加視圖模型類型的形參,比如vm→ 根據vm的某個屬性,比如Name判斷在上下文中是否存在,如果不存在就拋EntityNotFoundException異常→ 判斷vm所依賴的外鍵那對應的那個實體是否存在,比如vm中有各PoductCategoryId外鍵,就判斷下上
添加
→ 方法參數中有一個有關添加視圖模型類型的形參,比如vm
→ 根據vm的某個屬性,比如Name判斷在上下文中是否存在,如果不存在就拋EntityNotFoundException異常
→ 判斷vm所依賴的外鍵那對應的那個實體是否存在,比如vm中有各PoductCategoryId外鍵,就判斷下上下文中的ProductCategory是否存在,不存在就拋EntityNotFoundException異常
→ 關於1對多關、多對多關係
更新
→ 方法參數中有一個有關更新視圖模型的形參vm,還有一個主鍵,比如id
→ 根據id判斷在上下文中是否存在,如果不存在就拋EntityNotFoundException異常
→ 判斷上下文中的實體是否邏輯刪除,如果已經存在就拋Exception異常
→ 判斷上下文中的實體的其它鍵是否和方法中的其它形參相等,如果不等,拋EntityNotFoundException異常。比如vm中有一個SupplierId, 形參中有一個supplierId,如果不相等,就說明不是當前供應商的產品,當然要拋異常
→ 判斷上下文中的實體是否可編輯,通常視圖通過實體的一個欄位來判斷,比如Product這個領域模型有CheckState屬性,是枚舉類型,當在審核中的時候,就不允許編輯。如果實體當前的狀態是不允許編輯,那即拋Exception異常
→ 判斷視圖模型中的某個欄位和上下文中的實體中的該欄位是否不等,如果不能在判斷視圖模型中該欄位值是否在上下文中存在
if(vm.Name != product.Name)
{
if(await ProductExist(vm.Name))
{
throw new EntityAlreadyExistException("");
}
}
→ 處理一對多,多對多關係
根據主鍵獲取
→ 根據主鍵判斷上下文實體是否存在,不存在就EntityNotFoundException異常
→ 判斷上下文實體是否處於邏輯刪除狀態,如果是拋Exception異常
獲取所有
→ 拿到IQueryable類型的一個集合
→ 拿到集合元素數量
→ 基於所有欄位的的過濾
→ 基於每個欄位的過濾
→ 拿到過濾後集合元素數量
→ 排序
→ 分頁,Skip, Take
→ 轉換成視圖模型
刪除
→ 判斷要刪除的,在上下文中是否存在,不存在就拋EntityNotFoundException異常
→ 判斷該實體是否有依賴,有依賴就拋EntityDependencyException異常
→ 實施邏輯刪除或物理刪除
總結
● 判斷視圖模型中外鍵對應的實體是否存在,易忽略
● 判斷是否邏輯刪除,易忽略
● 判斷是否允許編輯,易忽略