ABP 初探 之基於EasyUI的CURD
結束了天天加班的項目,項目雖然結束,但還是有點小問題,只能在后期優化當中完成了,本次做項目采用了,MVC、Webapi、Entityframework,在園了里看到了有關ABP的介紹,同樣ABP也是最新技術集合,就加入了 ABP架構設計交流群 134710707,一起探討、學習與進步。
ABP的技術文檔全是英文資料,不過現在不用擔心了,群里的熱心朋友已翻譯成能看的懂語言了,詳情
ABP 源代碼地址 https://github.com/aspnetboilerplate
ABP的基本介紹就不講了它是基於.net 4.5.1的,下載文檔后自己了解吧,現在只講解怎么用了
公司的項目是基於Easyui的,因此Demo也是基於EasyUI的,ABP的返回值不能滿足Easyui的datagrid請求與顯示,對Abp源碼進行了部分修改,才能正常使用,具體修改會一一列出,給需要的朋友一點幫助。
ABP的請求值返回的對象屬性首字母小寫,這是因為默認的Json格式是 CamelCasePropertyNamesContractResolver ,只要把相關代碼修改為
對應的類名:AbpWebApiModule
private static void InitializeFormatters() { GlobalConfiguration.Configuration.Formatters.Clear(); var formatter = new JsonMediaTypeFormatter(); formatter.SerializerSettings.ContractResolver = new DefaultContractResolver(); formatter.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; GlobalConfiguration.Configuration.Formatters.Add(formatter); GlobalConfiguration.Configuration.Formatters.Add(new PlainTextFormatter()); }
Easyui的Datagrid請求是通過URL傳參數的,目前ABP不支持這種處理方法,因此只能自己在Controller里面寫方法了,不能調用自動生成的WebAPi,多了一個步驟,下面是構造的分頁類
public EasyUIPager GetPager(HttpRequestBase currentRequest) { EasyUIPager pager = new EasyUIPager(); if (currentRequest.Form["page"] != null) { pager.CurrentPage = int.Parse(currentRequest.Form["page"]); } if (currentRequest.Form["rows"] != null) { pager.PageSize = int.Parse(currentRequest.Form["rows"]); } pager.SortCloumnName = currentRequest.Form["sort"]; pager.SortOrder = currentRequest.Form["order"]; pager.Filter = currentRequest.Form["filter"]; return pager; }
JS 請求調用代碼

MVC Controller代碼

效果圖如下
關於創建人與最后更新人,ABP的處理比較好,只需要通過映射就可以了,不需要寫多余的子查詢,具體原理還沒查看源代碼,等了解后再詳解
關於批量操作,一般情況下每頁顯示20~50條數據,簡單的批量刪除基本可以滿足,如果需操作大量數據建議采用存儲過程,修改、添加不在介紹,具體實現請參考源代碼
public async Task Delete(BatchDeleteRequestInput input) { for (int i = 0; i < input.Id.Split(',').Length; i++) { await _userRepository.DeleteAsync(Convert.ToInt64(input.Id.Split(',')[i])); } await _unitOfWorkManager.Current.SaveChangesAsync(); }
對 UserFriendlyException 的處理進行了修改,根據不同的異常 彈出不同的提示框

EasyUI對應代碼

項目結構如下
大家都喜歡源代碼,F5直接運行,因此就寫了個demo供大家參考
設置 V.Market.Web 為啟動項目
修改 web.config 的連接字符串
<add name="Default" connectionString="data source=.;initial catalog=Market;persist security info=True;user id=sa;password=Password!;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
有的園友沒學習過EntityFramework,不知如何生成數據庫,下介紹數據庫的生成方法
通過命令生成數據庫 update-database (需運行兩次才能把數據寫到數據庫)
修改生成的數據 abpuser表 的 TenantId 修改成1
由於上傳代碼時,忘記修改登錄的用戶名了,因此需修改 HomeController的 登錄用戶名為 Admin