ABP問題速查表


如果你領導要讓你一夜之間掌握ABP,並且用ABP擼一個項目出來,你很可能很快速的過了一遍ABP文檔就馬上動手干活了。那么這篇文章就很適合你。

這篇文章列出了很多ABP新手問的問題和解答。注:有些同學問出了很有深度的問題,比如下面的第二個問題,但是這些問題不屬於快速解決問題范疇(即速查表),所以把這些問題歸類到了這篇文章《ABP有深度的問題》

這篇文章有些問題其實是不屬於ABP范疇的,然而ABP新手經常會遇到,所以還是列在這篇文章里面。

大家都知道IT世界變化很快,昨天的答案也許完全不適用今天。所以如果你發現答案過時了,請告訴我去更新,謝謝。

本文推薦使用方法:先直接Ctrl+F查找你的關鍵字,不行再慢慢看,因為我知道你看這篇文章的時候肯定很趕時間。

這篇文章會不斷更新。

  1. 問:ABP是否支持VS2005 + MS SQL 2008? :ABP支持VS2005, 但是ABP不支持MS SQL  2008 (我已經被坑過了),最低支持是MS SQL 2012
  2. 問:ABP的Entity 主鍵是怎么自動設置的?Entity和IEntity的源碼都沒看到[Key]標注啊。 :不用標注key,直接繼承FullAuditedEntity<你的key的數據類型> 即可。注意:這只是這個同學問的問題的一部分,另一部分是:“我是想知道ABP是怎么做到只用繼承這個就自動設置的”。這個問題很有深度,但是不屬於快速解決問題范疇(即速查表),所以歸類到了這篇文章《ABP有深度的問題》
  3. 問:我從官網下載ABP的Asp.net core + MPA版本為啥編譯不通過? :這個版本支持很不好,我在不同時間下載過幾次這個版本,從來沒有被編譯通過過,所以我已經放棄了這個版本了。
  4. 問:一個多對多的中間表,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; }
    

      

    關於這個答案有同學有不同見解,然而這篇文章目的是讓新手看完后馬上解決問題,因此采用了這個答案

  5. 問:ABP的AppService在class級設置了權限,那如何在這個class里的具體某個method支持匿名訪問?:在這個method頭部加上 [AbpAllowAnonymous] 即可
  6. 問:abp angular spa版本如何支持在開發機器和服務器上設置不同的config? :1. 在/assets/appconfig.json添加屬性和值。2. 修改AppPreBootstrap.ts里的getApplicationConfig方法來支持讀取這個值。3. 搞兩份appconfig.json,開發機器一份,服務器一份,部署后自動替換為對應的appconfig.json文件
  7. 問:修改某個記錄,當字段值是enum的時候,控件是dropdownlist / select / radio等可選擇控件時,總是加載不出正確的值。:可選擇控件的選項值一定要加[],比如nz-select的nz-option的nzValue一定要加[]寫成[nzValue],這點和傳統的javascript/html區別很大。
  8. 為啥abp3.6版本的UserManager有CreateIdentityAsync方法,而3.8版本卻沒有了。項目升級怎么辦?: 因為abp用的auth升級了。請參考https://github.com/aspnet/Security/issues/1310 去升級。
  9. 為啥使用{{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)}}
  10. 項目到了一定規模,第一次加載很慢,怎么調優?答:最快最有效的辦法是啟用Lazy load, 參考這兩篇文章:https://angular.cn/guide/router#lazy-loading-route-configuration 和 https://angular.cn/guide/lazy-loading-ngmodules
  11. angular/typescript是否支持字典dictionary? 答:支持。代碼如下
    ApplyCount: { [key: string]: boolean; } = {};

     代碼里的boolean是字典dictionary中value的類型,要根據你實際情況來修改

  12. 為啥有時候返回結果顯示undocumented 或者一片空白?答:先看看應當返回null時能否正常顯示,如果可以那就是返回結果的dto類型里有循環引用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM