如果你領導要讓你一夜之間掌握ABP,並且用ABP擼一個項目出來,你很可能很快速的過了一遍ABP文檔就馬上動手干活了。那么這篇文章就很適合你。
這篇文章列出了很多ABP新手問的問題和解答。注:有些同學問出了很有深度的問題,比如下面的第二個問題,但是這些問題不屬於快速解決問題范疇(即速查表),所以把這些問題歸類到了這篇文章《ABP有深度的問題》
這篇文章有些問題其實是不屬於ABP范疇的,然而ABP新手經常會遇到,所以還是列在這篇文章里面。
大家都知道IT世界變化很快,昨天的答案也許完全不適用今天。所以如果你發現答案過時了,請告訴我去更新,謝謝。
本文推薦使用方法:先直接Ctrl+F查找你的關鍵字,不行再慢慢看,因為我知道你看這篇文章的時候肯定很趕時間。
這篇文章會不斷更新。
- 問:ABP是否支持VS2005 + MS SQL 2008? 答:ABP支持VS2005, 但是ABP不支持MS SQL 2008 (我已經被坑過了),最低支持是MS SQL 2012
- 問:ABP的Entity 主鍵是怎么自動設置的?Entity和IEntity的源碼都沒看到[Key]標注啊。 答:不用標注key,直接繼承FullAuditedEntity<你的key的數據類型> 即可。注意:這只是這個同學問的問題的一部分,另一部分是:“我是想知道ABP是怎么做到只用繼承這個就自動設置的”。這個問題很有深度,但是不屬於快速解決問題范疇(即速查表),所以歸類到了這篇文章《ABP有深度的問題》
- 問:我從官網下載ABP的Asp.net core + MPA版本為啥編譯不通過? 答:這個版本支持很不好,我在不同時間下載過幾次這個版本,從來沒有被編譯通過過,所以我已經放棄了這個版本了。
- 問:一個多對多的中間表,entity又想繼承FullAuditedEntity,又想使用另外的2個id來做主鍵,需要怎么處理?繼承FullAuditedEntity會自動生成ID自增長,且自動生成IsDeleted、CreationTime等字段。但又想用另外的id(如CityId,companyId)做中間表的ID控制避免重復數據。改如何處理?答:使用復合主鍵即可,用如下代碼把CityId, companyid做成復合主鍵。
[Key, Column(Order = 2)] public int CityId{ get; set; } [Key, Column(Order = 3)] public int companyId{ get; set; }
關於這個答案有同學有不同見解,然而這篇文章目的是讓新手看完后馬上解決問題,因此采用了這個答案
- 問:ABP的AppService在class級設置了權限,那如何在這個class里的具體某個method支持匿名訪問?答:在這個method頭部加上 [AbpAllowAnonymous] 即可
- 問:abp angular spa版本如何支持在開發機器和服務器上設置不同的config? 答:1. 在/assets/appconfig.json添加屬性和值。2. 修改AppPreBootstrap.ts里的getApplicationConfig方法來支持讀取這個值。3. 搞兩份appconfig.json,開發機器一份,服務器一份,部署后自動替換為對應的appconfig.json文件
- 問:修改某個記錄,當字段值是enum的時候,控件是dropdownlist / select / radio等可選擇控件時,總是加載不出正確的值。答:可選擇控件的選項值一定要加[],比如nz-select的nz-option的nzValue一定要加[]寫成[nzValue],這點和傳統的javascript/html區別很大。
- 為啥abp3.6版本的UserManager有CreateIdentityAsync方法,而3.8版本卻沒有了。項目升級怎么辦?答: 因為abp用的auth升級了。請參考https://github.com/aspnet/Security/issues/1310 去升級。
- 為啥使用{{time | date:'yyyy-MM-dd HH:mm'}}在Chrome下可以輸出值,在IE11下不可以?答:angular的datetime pipe對IE兼容性很差,最安全的辦法是在ts文件寫好函數封裝好,比如:
formatDateTime(input: string): string { // moment("2016-01-17T:08:44:29+0100").format('MM/DD/YYYY'); return moment(input).format('YYYY-MM-DD HH:mm'); }
然后在html調用,比如 {{formatDateTime(time)}} - 項目到了一定規模,第一次加載很慢,怎么調優?答:最快最有效的辦法是啟用Lazy load, 參考這兩篇文章:https://angular.cn/guide/router#lazy-loading-route-configuration 和 https://angular.cn/guide/lazy-loading-ngmodules
- angular/typescript是否支持字典dictionary? 答:支持。代碼如下
ApplyCount: { [key: string]: boolean; } = {};
代碼里的boolean是字典dictionary中value的類型,要根據你實際情況來修改
- 為啥有時候返回結果顯示undocumented 或者一片空白?答:先看看應當返回null時能否正常顯示,如果可以那就是返回結果的dto類型里有循環引用