企業應用開發中.NET EF常用哪種模式?

2023-12-14 09:01:12

前言

本篇文章來源於微信技術群小夥伴的提問,在企業應用開發中.NET ORM EF常用哪種模式進行開發?今天我們一起來了解一下EF開發的三種模式。

EF/EF Core介紹

Entity Framework (EF) Core 是輕量化、可延伸、開源和跨平臺版的常用 Entity Framework 資料存取技術,EF Core 是適用於 .NET 的現代物件資料庫對映器。它支援 LINQ 查詢、更改跟蹤、更新和架構遷移。EF Core 通過提供程式外掛 API 與 SQL Server、Azure SQL 資料庫、SQLite、Azure Cosmos DB、MySQL、PostgreSQL 和其他資料庫一起使用。(微軟官方出品)。

官方檔案教學:https://docs.microsoft.com/zh-cn/ef/

GitHub地址:https://github.com/dotnet/efcore

.NET ORM如何選擇?

假如你到現在還不知道該選擇哪種ORM來進行.NET應用的開發,不妨先看看下面的這兩篇文章,相信對你會有所幫助。

EF開發的三種模式

這三種模式都是用於定義和管理資料模型的方式,但是它們的實現方式不同,適用於不同的場景。

  1. 程式碼優先模式(Code First)
  2. 資料庫優先模式(Database First)
  3. 模型優先模式(Model First)

程式碼優先模式(Code First)

程式碼優先模式是指先編寫對於資料庫表的實體類和資料庫上下文類,然後通過 EF 工具根據程式碼建立表、生成資料庫表結構、對映檔案等。

優點

  1. 這種模式適用於開發人員更習慣於使用程式碼管理資料模型的場景,同時也能夠更靈活地定義資料模型。
  2. EF提供了自動遷移功能,能夠根據實體類的變化自動更新資料庫結構,簡化了資料庫迭代開發的過程。

缺點

當資料模型發生變化時,開發人員還需要手動修改程式碼並執行資料遷移操作。因此,在一些情況下,程式碼工作可能會相對繁瑣,特別是在處理複雜的資料模型或頻繁變更的情況下。

資料庫優先模式(Database First)

資料庫優先模式是指首先要建立好資料庫,然後將使用 Visual Studio 中包含的實體框架設計器來建立模型(專案=>新增新項=>從左側選單中選擇「資料」,然後選擇「ADO.NET 實體資料模型」=>實體資料模型嚮導(新增資料庫存取地址)=>選擇「從資料庫生成」,然後單擊「下一步」),最後生成EDMX 檔案(.edmx 擴充套件名)。

優點

  1. 通過已有的資料庫結構快速生成資料模型,減少了手動編寫模型類的時間和工作量,加快了開發速度。
  2. 適用於已有資料庫的專案,無需從頭設計資料模型,便於與現有資料庫進行整合開發。
  3. 當資料庫結構發生變化時,可以通過更新資料模型來保持模型與資料庫的一致性,方便維護。

缺點

  1. 自動生成的模型類可能包含過多的屬性和關聯,導致模型類過於龐大和複雜,不利於維護和理解。
  2. 自動生成的模型類可能並不是最佳化的資料存取方式,可能導致效能上的一些問題,需要額外優化。

模型優先模式(Model First)

模型優先模式介於資料庫優先模式和程式碼優先模式兩者之間(結合體)。在模型優先模式中,首先定義實體資料模型(選擇「空模型」並單擊「完成」),然後通過該模型生成資料庫結構。

優點

使用視覺化工具,開發人員可以直觀地設計資料模型,通過拖放和設定屬性來定義實體和關係,從而提高開發效率。

缺點

操作步驟比較繁瑣,對於複雜的資料模型,使用視覺化工具進行設計和管理可能會變得困難。當模型變得龐大和複雜時,視覺化工具的效能和易用性可能會受到影響。

最後總結

上面通過對EF三種開發模式的簡單概述,可以看出程式碼優先模式(Code First)和資料庫優先模式(Database First)是比較適合企業應用開發的,因為這兩種方式更符合我們實際開發的使用模式。那麼具體用哪一種,這就需要根據你自己專案的複雜度和團隊使用習慣來衡量了,假如你有不同的見解歡迎留言。

DotNetGuide技術社群交流群

  • DotNetGuide技術社群是一個面向.NET開發者的開源技術社群,旨在為開發者們提供全面的C#/.NET/.NET Core相關學習資料、技術分享和諮詢、專案推薦、招聘資訊和解決問題的平臺。
  • 在這個社群中,開發者們可以分享自己的技術文章、專案經驗、遇到的疑難技術問題以及解決方案,並且還有機會結識志同道合的開發者。
  • 我們致力於構建一個積極向上、和諧友善的.NET技術交流平臺,為廣大.NET開發者帶來更多的價值和成長機會。

歡迎加入DotNetGuide技術社群微信交流群