Entity Framework | The Will Will Web

The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何在 EF Core 3.1 的模型驗證方法中注入 ServiceCollection 中的服務

由於 .NET Core 大量的使用 DI 技術,所有註冊到 DI 容器(ServiceCollection)的服務,幾乎都可以用「注入」的方式取得物件。只不過有些類別不容易用建構式注入的方式取得服務,這篇文章將分享如何在 EF Core 3.1 的模型驗證方法中注入 ServiceCollection 裡的任何服務。

... 繼續閱讀 ...

如何在 EF Core 3.1 的 Code First 進行資料庫移轉時指定資料庫定序

最近在我的台灣 .NET 技術愛好者俱樂部臉書社團有人問到如何在 EF Core 3.1 的 Code First 進行資料庫移轉時指定資料庫定序 (Database Collation)。我自己也嘗試了一下搜尋,網路上確實都找不到相關資料,但我覺得「理論上」應該很容易辦到,因此自己實驗了一下,也研究出方法,這篇文章將分享我的實際作法。

... 繼續閱讀 ...

解決 Entity Framework 6 無法在交易內進行備份或還原動作的問題

我們都知道 Entity Framework 是一個 ORM 框架,在應用程式中基本上都不太會去碰觸太多關於後端資料庫的特定語法,但針對一些效能調校或資料庫管理等需求時,其實還是能透過 Entity Framework 幫我們執行一些自訂的 T-SQL 語法,只是有些地方需要注意一下,如果你今天遇到無法在 Entity Framework 中執行預存程序或匯入函式時,那麼這篇文章可能對你有幫助。

... 繼續閱讀 ...

解決 SQL Server 檢視表 (Views) 無法匯入 EDMX 的問題

前陣子在教學的過程中,有位學員問了一個 Entity Framework 的問題,他在 SQL Server 資料庫中建立了一個報表用的檢視表 (Views),然後想要匯入到 Entity Framework 的 EDMX 實體資料模型中,但卻怎樣都匯不進去,主要原因就出在 Entity Framework 無法自動推斷該檢視表的主索引鍵為何,所以才會無法匯入,而本篇文章將說明匯入 SQL Server 檢視表 (Views) 到 Entity Framework 的注意事項。

... 繼續閱讀 ...

ASP.NET MVC 開發心得分享 (24):擴充部分類別的建構子

在 ASP.NET MVC 使用 Entity Framework 資料庫先行開發模式 (Database-First Development) 的時候,因為所有 POCO (Plain Old CLR Object) 類別都會透過 *.tt 程式碼產生器範本自動建立,當我們想擴充資料模型時,勢必不會直接把驗證屬性直接寫在這些類別裡,而是在另一個部分類別檔案中,透過 MetadataType 屬性 (Attribute) 宣告一個 Metadata 類別 (又稱 Buddy Class)。另一方面,我們也會在資料模型的 POCO 類別的「建構子」方法中宣告屬性的預設值,但這時問題來了,如果我們在自動產生的資料模型類別中,已經宣告過「建構子」的話,那我們該如何在另一個部分類別檔案中再次「宣告」建構子呢?這就是這篇文章想要解決的難題。

... 繼續閱讀 ...

EF Code First: 讓 __MigrationHistory 不要成為系統資料表

使用 Entity Framework Code First 開發資料庫應用程式時,當資料庫首次建立後,預設 Entity Framework 就會幫你在資料庫中建立一個名為 __MigrationHistory 的系統資料表,這個資料表預設在 Visual Studio 2012 的伺服器總管中是看不到的,但就算看的到,也無法進行管理,使用上頗為不便。因此本篇文章就是要來告訴各位如何幫你把這個表格從「系統資料表」轉換成「使用者資料表」,如此一來就能方便的在 Visual Studio 2012 中管理。

... 繼續閱讀 ...

透過 Entity Framework 如何有效率的取回特定資料表的筆數

在許多開發情境下經常會試圖取回整個資料表的筆數,像我們就有個統計網站累積使用人次功能,開發人員寫的時候就是用 SELECT COUNT(*) FROM TableName 的方式來取得目前總共有多少人次進入網站,但用這種方式執行效率並不高,每次執行都會產生一次 Index Scan,也就是在 SQL Server 資料庫裡所有主索引鍵的資料都會被掃瞄過一次才能統計出資料總筆數,當資料越多的時候,效能就會越差,在這裡我提供另一種 hack 的方法可以更有效率的取得整個表格的總筆數,但此法僅適用於 SQL Server 喔!

... 繼續閱讀 ...

介紹好用 Visual Studio 2010 擴充套件:Entity Visualizer

採用 Entity Framework 技術來開發應用程式有一個經常會遇到的問題,就是不知道到底 Entity Framework 幫我們產生了什麼 T-SQL 到資料庫,雖然 SQL Server 資料庫有 SQL Server Profiler 工具可以分析追蹤應用程式實際查詢的 T-SQL 語法,不過在開發階段用這種方式追蹤程式碼還是有點麻煩的,今天要介紹的 Entity Visualizer 擴充套件就非常適合用來查詢這些透 Entity Framework 產生的 T-SQL 語法,相信對開發偵錯工作可以帶來不小的幫助。

... 繼續閱讀 ...

介紹好用 Visual Studio 2010 擴充套件:All-In-One Code Framework Sample Browser

Microsoft All-In-One Code Framework 又稱 1code,集結微軟開發平台中各個技術領域的範例程式碼,目前已經累積了超過六百多個含有完整且可執行的專案原始碼在上面,主要的目的就是用來幫助學習微軟技術的開發人員解決各種工作上常見的問題,而這些範例程式碼的產生都源自於 MSDN 論壇上、社交媒體或其他開發社群等提出的種種開發問題,並由微軟員工撰寫範例程式碼提供給所有開發人員下載參考、觀摩之用,這一切不但都是免費的,更重要的是:如果你覺得他們沒有你要的範例程式,你還可以提出需求,請微軟的工程師幫你撰寫範例程式,Oh~ My GOD~~

... 繼續閱讀 ...

如何在 SQL Server 資料庫設計「一對一」表格關聯

我們在做資料庫設計時,通常都會需要設計表格之間的關聯,不過一般來說都是設定一對多的表格關聯,如果是多對多的表格關聯通常都會多設計一張表格來儲存兩個表格之間多對多的關聯關係。但是如果我們今天單純的只是想設計一些擴充欄位到另一個獨立的表格裡,這時我們在 SQL Server 裡還需要設計關聯嗎?還是在程式中自己知道就好不需要設計關聯呢?其實是需要的,只是很少人知道可以這樣設計而已!

... 繼續閱讀 ...

執行 Entity Framework 的「從資料庫更新模型」為何不更新

最近有同事遇到一個技術問題,他們的專案是採用 Entity Framework 技術,不過由於客戶端需求變更,導致資料庫欄位屬性被變更了,原本為 NOT NULL 的欄位從資料庫端已經改成了可允許 NULL,不過他們在 Visual Studio 2010 的 ADO.NET 實體資料模型設計工具 (ADO.NET Entity Data Model) 編輯 EDMX 檔案時發現執行 從資料庫更新模型 (Update Model from Database) 並不會自動反應資料庫的欄位變更到這裡,但是新增、刪除資料庫欄位時卻會更新,他們覺得很奇怪,以下就是我的回答。

... 繼續閱讀 ...

Entity Framework 如何呼叫 SQL 裡沒有回傳參數的預儲程序

其實早在 Entity Framework 4.0 之前就已經提供了從 ObjectContext 呼叫 預儲程序 (Stored Procedure) 的能力,不過早期的 Entity Framework V2 版本支援度不夠,以致於只要是這個預儲程序的回傳值的型別不是 實體 (Entity) 的話,就會無法直接從 ObjectContext 進行叫用,這個架構上的問題直到 V4 這個版本才正式解決,以下就是從 Entity Framework 呼叫預儲程序的方法。

... 繼續閱讀 ...