1. 程式人生 > 其它 >自動生成程式碼和建立資料庫表的一些要點

自動生成程式碼和建立資料庫表的一些要點

1、建立的實體的名稱空間得是MainInfo.Eshop.XX

XX為資料夾的名稱,否則自動生成的程式碼如Service檔案路徑有異。

2、開啟CMD輸入以下內容,自動生成程式碼

abphelper generate crud "DictItem" -d "D:\Workpace\MainInfo.Eshop\aspnet-core" --skip-permissions --skip-db-migrations --skip-ui --skip-view-model --skip-localization --skip-test

abphelper generate crud "TradeRecord" -d "D:\Workpace\MainInfo.Eshop\aspnet-core" --skip-permissions --skip-db-migrations --skip-ui --skip-view-model --skip-localization --skip-test --custom-repository

DictItem 為實體名稱

D:\Workpace\MainInfo.Eshop\aspnet-core 為你的解決方案路徑,但是路徑最後的一級必須是aspnet-core

路徑之後的內容為選項,可以自行更改,但是以上為推薦選項

可以增加--Custom Repository ,會自動建立倉儲檔案,適合於業務特別複雜的實體

其他選項

3、實體是軟刪除還是硬刪除取決於你實體繼承的類是否帶有Full字首

如FullAuditedEntity<Guid>為軟刪除,AuditedEntity<Guid>為硬刪除

4、如果你的實體中含有導航屬性,自動生成的Dto檔案也會照搬,但是由於Dto所在的層無法引用實體層的原因,會報錯,直接刪除即可。然後根據邏輯自己手動新增屬性如

Public string CategoryName { get ; set ; }

5、生成程式碼後找到EShopDbContextModelCreatingExtensions檔案,修改資料庫配置。

資料庫名稱:在EShopConsts檔案中找到合適的字首,後加實體名稱,建議使用語法糖nameof,以便以後的修改。

使用HasComment方法設定表的註釋。

資料庫型別:string型別的欄位如果不做HasMaxLength方法的設定,在資料庫中自動為longtext資料型別,佔用資源過大。長度具體如何設定看FieldLengthconsts檔案。

數字型別的欄位有小數用decimal即可,沒有小數用int,不確定是否有小數用decimal。

必填項:不能為空的欄位需要加上IsRequired方法。

預設值:預設值使用HasDefaultValue方法,但是需要注意和IsRequired搭配可能會產生一些問題。

6、之前說到的導航屬性是讓EF自動判斷外來鍵的一種方式,如果有導航屬性了就不需要做額外資料庫外來鍵配置。

如果沒有自動加外來鍵,則可以在配置檔案中設定

b.HasMany(d => d.DictItems).WithOne(r => r.DictCategory);

或者

b.HasOne(d => d.DictCategory).WithMany(r => r.DictItems);

以上是一對多關係的配置。

之後會在資料庫中增加外來鍵約束。

且預設為級聯刪除。

7、自動生成程式碼會重寫DbContextModelCreatingExtensions.cs檔案,將裡面的中文替換成亂碼。同時由於我們要重寫資料庫設定,因此自動生成程式碼檔案後,將對DbContextModelCreatingExtensions檔案的修改撤銷掉,手動增加即可。

8、decimal型別的欄位資料庫自動生成的資料型別為decimal(65,30),長度和精度過高,因此需要額外設定數值型別的精度和長度。

增加約束:

可以根據業務需求擴充套件,為求效率目前統一為decimal(10,4);

在資料庫設定檔案EShopDbContextModelCreatingExtensions中配置。

9、在遷移檔案命名時建議加上遷移時間和次數。

10、增加表的唯一性約束。

11、增加表的自增欄位。

欄位必須得是int型別。