.NET幫助 Entity Framework Core(對開發者如何理解的工作) Curtis Chau 更新日期:6月 22, 2025 Download IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article 在現代軟體開發領域,高效的數據管理至關重要。 無論您是在構建一個簡單的應用程序還是一個複雜的企業系統,有效地訪問、操作和保存數據是基本要求。 C#中的Entity Framework Core(EF Core)是一種強大的工具,它通過提供一種便捷的面向對象的方法來簡化數據訪問,方便地與數據庫交互。 在本文中,我們將深入探討EF Core的世界,探索其功能、能力和最佳實踐。 Also, we will have a look at IronPDF for Handling PDF Documents from Iron Software Solutions to read, write, and manage PDF documents. 我們將使用這兩個軟體包創建一個實用範例。 理解Entity Framework Core Entity Framework Core是流行的Entity Framework數據訪問技術的開源、輕量級和可擴展的版本。 它旨在跨平台運行,支持各種現有的數據庫服務器提供商,包括SQL Server、SQLite、MySQL、PostgreSQL、Azure Cosmos DB等。 EF Core是一個現代對象數據庫映射器,遵循ORM(Object-Relational Mapping)模式,允許開發人員使用.NET對象與數據庫交互,消除了手動編寫繁瑣SQL查詢的需要。 EF Core的關鍵特點 實體建模: EF Core使開發人員能根據Plain Old CLR Objects (POCOs)來定義數據模型。 這些實體類代表數據庫表,其屬性對應於表列。 LINQ支持: EF Core完美支持LINQ查詢(語言集成查詢),允許開發人員使用熟悉的C#語法針對SQL Server或任何其他數據庫撰寫強類型查詢。 這使得查詢數據變得直觀並減少了運行時錯誤的可能性。 另外,可以將原始SQL語句與LINQ查詢一起使用。 數據庫遷移: 管理數據庫模式的變更可能是一項挑戰,特別是在團隊環境中。 EF Core通過提供數據庫遷移功能來簡化此過程,允許開發人員使用代碼優先遷移將增量變更應用到數據庫schema。 延遲加載和急切加載: EF Core支持延遲加載和急切加載策略,使開發人員能根據使用情況需求按需或提前加載相關數據,優化性能。 事務管理: 事務在數據庫操作期間確保數據的一致性和完整性。 EF Core允許開發人員顯式地處理事務,確保一組數據庫操作要么全部成功,要么全部失敗。 並發控制: EF Core提供內置支持來管理併發沖突,允許開發人員檢測並解決多個用戶同時嘗試修改相同數據時可能會產生的沖突。 使用EF Core入門 讓我們在ASP.NET Core應用程序中創建一個使用SQLite與Entity Framework Core (EF Core)的基本範例。 以下是步驟: 創建您的應用程序: 首先創建一個控制台或ASP.NET應用程序。 安裝必要的包: 將以下NuGet包添加到您的項目中: Microsoft.EntityFrameworkCore (版本1.0.0或更高版本) Microsoft.EntityFrameworkCore.Sqlite (版本1.0.0或更高版本) 創建您的數據庫上下文: 定義一個類作為您的數據庫上下文(例如DatabaseContext),該類繼承自DbContext。 在OnConfiguring方法中設置SQLite連接字符串: public class DatabaseContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Filename=sample.db"); } } public class DatabaseContext : DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Filename=sample.db"); } } Public Class DatabaseContext Inherits DbContext Protected Overrides Sub OnConfiguring(ByVal optionsBuilder As DbContextOptionsBuilder) optionsBuilder.UseSqlite("Filename=sample.db") End Sub End Class $vbLabelText $csharpLabel 注冊上下文: 在Startup類中,將您的上下文添加到服務中: public void ConfigureServices(IServiceCollection services) { services.AddEntityFrameworkSqlite().AddDbContext<DatabaseContext>(); } public void ConfigureServices(IServiceCollection services) { services.AddEntityFrameworkSqlite().AddDbContext<DatabaseContext>(); } Public Sub ConfigureServices(ByVal services As IServiceCollection) services.AddEntityFrameworkSqlite().AddDbContext(Of DatabaseContext)() End Sub $vbLabelText $csharpLabel 在啟動時創建數據庫: 在Startup構造函數中創建您的數據庫: public Startup(IHostingEnvironment env) { using (var client = new DatabaseContext()) { client.Database.EnsureCreated(); } } public Startup(IHostingEnvironment env) { using (var client = new DatabaseContext()) { client.Database.EnsureCreated(); } } 'INSTANT VB WARNING: The following constructor is declared outside of its associated class: 'ORIGINAL LINE: public Startup(IHostingEnvironment env) Public Sub New(ByVal env As IHostingEnvironment) Using client = New DatabaseContext() client.Database.EnsureCreated() End Using End Sub $vbLabelText $csharpLabel 在您的應用程序中使用SQLite: 現在您可以通過EF Core在ASP.NET Core應用程序中使用SQLite。 定義您的模型並使用DatabaseContext來與數據庫進行交互。 請記住這是一個基本例子,還有其他方法來配置連接字符串並使用EF Core。 隨意探索更高級的功能並根據您的特定需求進行調整! EF Core開發的最佳實踐 使DbContext範圍化: EF Core中的DbContext實例設計成短暫的,通常應範圍化到web應用程序中單個請求的生命週期。 對於只讀操作使用AsNoTracking: 在執行只讀操作時,當實體不會被修改時,使用AsNoTracking方法來提升性能,因為這可以省略變更跟蹤。 優化查詢: 通過使用適當的索引、分頁和過濾技術來撰寫高效的查詢,以最小化從數據庫檢索的數據量。 避免N+1查詢問題: 小心N+1查詢問題,即在每個集合相關實體上執行的查詢。 使用急取加載或顯式加載來高效地獲取相關數據。 監控性能: 使用如Entity Framework Profiler或內置日誌功能之類的工具監控EF Core性能,查識和解決性能瓶頸。 IronPDF 简介 IronPDF是一個強大的C# PDF庫,可讓您在.NET項目中生成、編輯和提取PDF文檔內容。 以下是一些關鍵功能: HTML 到 PDF 轉換: 將HTML、CSS和JavaScript內容轉換為PDF格式。 使用Chrome渲染引擎來獲得像素完美的PDF。 從網址、HTML 文件或 HTML 字串生成 PDF。 圖像和內容轉換: 將圖像轉換為PDF,或從PDF中提取圖像。 從現有PDF中提取文本和圖像。 支持多種圖像格式。 編輯和操縱: 為PDF設置屬性、安全性和權限。 添加數字簽名。 兼容 .NET Core(8、7、6、5 和 3.1+)、.NET Standard(2.0+)和 .NET Framework(4.6.2+)。 跨平台支持: 兼容 Windows、Linux 和 macOS。 可在 NuGet 上獲得,便於安裝。 使用 IronPDF 和 DuckDB .NET 生成 PDF 文檔 使用IronPDF和EF Core生成PDF文檔 提供項目名稱。 提供.NET跨平台版本。 安裝Microsoft.EntityFrameworkCore包。 安裝Microsoft.EntityFrameworkCore.SqlLite包。 安裝IronPDF包。 將以下代碼添加到Program.cs中。 using IronPdf; using Microsoft.EntityFrameworkCore; using System; using System.Linq; namespace CodeSample { public class Program { public static void Main() { Console.WriteLine("-------------Demo EF core and IronPDF--------------"); // Disable local disk access or cross-origin requests Installation.EnableWebSecurity = true; // Instantiate Renderer var renderer = new ChromePdfRenderer(); // Start with initial HTML content var content = "<h1>Demo EF core and IronPDF</h1>"; content += "<h2>Add Students</h2>"; // Add Students to Database using (var client = new DatabaseContext()) { client.Database.EnsureCreated(); // Create table if it doesn't exist client.Students.ExecuteDelete(); // Ensure the table is clean // Define students var students = new[] { new Student { StudentName = "Bill", DateOfBirth = new DateTime(1990, 12, 01), Height = 5.45M, Weight = 56, Grade = 10 }, new Student { StudentName = "Mike", DateOfBirth = new DateTime(1992, 12, 06), Height = 4.45M, Weight = 34, Grade = 8 }, new Student { StudentName = "Peter", DateOfBirth = new DateTime(1990, 12, 03), Height = 5.0M, Weight = 50, Grade = 10 }, new Student { StudentName = "Bob", DateOfBirth = new DateTime(1990, 12, 09), Height = 4.56M, Weight = 56, Grade = 10 }, new Student { StudentName = "Harry", DateOfBirth = new DateTime(1990, 12, 21), Height = 5.6M, Weight = 56, Grade = 10 }, new Student { StudentName = "Charle", DateOfBirth = new DateTime(1993, 12, 11), Height = 5.5M, Weight = 56, Grade = 7 } }; // Add students to database client.Students.AddRange(students); client.SaveChanges(); // Add students info to HTML content foreach (var student in students) { content = AddStudent(content, student); } } content += "<h2>Display Students in Database</h2>"; // Display Students in Database using (var client = new DatabaseContext()) { Console.WriteLine($"Displaying Students in Database:"); var students = client.Students.ToList(); foreach (var student in students) { Console.WriteLine($"Name= {student.StudentName}, ID={student.StudentID}, Grade={student.Grade}, Weight={student.Weight}, Height={student.Height}"); content = AddStudent(content, student); } } // Render HTML content to PDF var pdf = renderer.RenderHtmlAsPdf(content); // Export to a file or stream pdf.SaveAs("AwesomeEfCoreAndIronPdf.pdf"); } // Helper method to add student info as HTML content private static string AddStudent(string content, Student student) { content += $"<p>Name = {student.StudentName}, ID={student.StudentID}, Grade={student.Grade}, Weight={student.Weight}, Height={student.Height}</p>"; return content; } } public class DatabaseContext : DbContext { public DbSet<Student> Students { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Filename=IronPdfDemo.db"); } } public class Student { public int StudentID { get; set; } public string StudentName { get; set; } public DateTime? DateOfBirth { get; set; } public decimal Height { get; set; } public float Weight { get; set; } public int Grade { get; set; } } } using IronPdf; using Microsoft.EntityFrameworkCore; using System; using System.Linq; namespace CodeSample { public class Program { public static void Main() { Console.WriteLine("-------------Demo EF core and IronPDF--------------"); // Disable local disk access or cross-origin requests Installation.EnableWebSecurity = true; // Instantiate Renderer var renderer = new ChromePdfRenderer(); // Start with initial HTML content var content = "<h1>Demo EF core and IronPDF</h1>"; content += "<h2>Add Students</h2>"; // Add Students to Database using (var client = new DatabaseContext()) { client.Database.EnsureCreated(); // Create table if it doesn't exist client.Students.ExecuteDelete(); // Ensure the table is clean // Define students var students = new[] { new Student { StudentName = "Bill", DateOfBirth = new DateTime(1990, 12, 01), Height = 5.45M, Weight = 56, Grade = 10 }, new Student { StudentName = "Mike", DateOfBirth = new DateTime(1992, 12, 06), Height = 4.45M, Weight = 34, Grade = 8 }, new Student { StudentName = "Peter", DateOfBirth = new DateTime(1990, 12, 03), Height = 5.0M, Weight = 50, Grade = 10 }, new Student { StudentName = "Bob", DateOfBirth = new DateTime(1990, 12, 09), Height = 4.56M, Weight = 56, Grade = 10 }, new Student { StudentName = "Harry", DateOfBirth = new DateTime(1990, 12, 21), Height = 5.6M, Weight = 56, Grade = 10 }, new Student { StudentName = "Charle", DateOfBirth = new DateTime(1993, 12, 11), Height = 5.5M, Weight = 56, Grade = 7 } }; // Add students to database client.Students.AddRange(students); client.SaveChanges(); // Add students info to HTML content foreach (var student in students) { content = AddStudent(content, student); } } content += "<h2>Display Students in Database</h2>"; // Display Students in Database using (var client = new DatabaseContext()) { Console.WriteLine($"Displaying Students in Database:"); var students = client.Students.ToList(); foreach (var student in students) { Console.WriteLine($"Name= {student.StudentName}, ID={student.StudentID}, Grade={student.Grade}, Weight={student.Weight}, Height={student.Height}"); content = AddStudent(content, student); } } // Render HTML content to PDF var pdf = renderer.RenderHtmlAsPdf(content); // Export to a file or stream pdf.SaveAs("AwesomeEfCoreAndIronPdf.pdf"); } // Helper method to add student info as HTML content private static string AddStudent(string content, Student student) { content += $"<p>Name = {student.StudentName}, ID={student.StudentID}, Grade={student.Grade}, Weight={student.Weight}, Height={student.Height}</p>"; return content; } } public class DatabaseContext : DbContext { public DbSet<Student> Students { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite("Filename=IronPdfDemo.db"); } } public class Student { public int StudentID { get; set; } public string StudentName { get; set; } public DateTime? DateOfBirth { get; set; } public decimal Height { get; set; } public float Weight { get; set; } public int Grade { get; set; } } } Imports IronPdf Imports Microsoft.EntityFrameworkCore Imports System Imports System.Linq Namespace CodeSample Public Class Program Public Shared Sub Main() Console.WriteLine("-------------Demo EF core and IronPDF--------------") ' Disable local disk access or cross-origin requests Installation.EnableWebSecurity = True ' Instantiate Renderer Dim renderer = New ChromePdfRenderer() ' Start with initial HTML content Dim content = "<h1>Demo EF core and IronPDF</h1>" content &= "<h2>Add Students</h2>" ' Add Students to Database Using client = New DatabaseContext() client.Database.EnsureCreated() ' Create table if it doesn't exist client.Students.ExecuteDelete() ' Ensure the table is clean ' Define students Dim students = { New Student With { .StudentName = "Bill", .DateOfBirth = New DateTime(1990, 12, 01), .Height = 5.45D, .Weight = 56, .Grade = 10 }, New Student With { .StudentName = "Mike", .DateOfBirth = New DateTime(1992, 12, 06), .Height = 4.45D, .Weight = 34, .Grade = 8 }, New Student With { .StudentName = "Peter", .DateOfBirth = New DateTime(1990, 12, 03), .Height = 5.0D, .Weight = 50, .Grade = 10 }, New Student With { .StudentName = "Bob", .DateOfBirth = New DateTime(1990, 12, 09), .Height = 4.56D, .Weight = 56, .Grade = 10 }, New Student With { .StudentName = "Harry", .DateOfBirth = New DateTime(1990, 12, 21), .Height = 5.6D, .Weight = 56, .Grade = 10 }, New Student With { .StudentName = "Charle", .DateOfBirth = New DateTime(1993, 12, 11), .Height = 5.5D, .Weight = 56, .Grade = 7 } } ' Add students to database client.Students.AddRange(students) client.SaveChanges() ' Add students info to HTML content For Each student In students content = AddStudent(content, student) Next student End Using content &= "<h2>Display Students in Database</h2>" ' Display Students in Database Using client = New DatabaseContext() Console.WriteLine($"Displaying Students in Database:") Dim students = client.Students.ToList() For Each student In students Console.WriteLine($"Name= {student.StudentName}, ID={student.StudentID}, Grade={student.Grade}, Weight={student.Weight}, Height={student.Height}") content = AddStudent(content, student) Next student End Using ' Render HTML content to PDF Dim pdf = renderer.RenderHtmlAsPdf(content) ' Export to a file or stream pdf.SaveAs("AwesomeEfCoreAndIronPdf.pdf") End Sub ' Helper method to add student info as HTML content Private Shared Function AddStudent(ByVal content As String, ByVal student As Student) As String content &= $"<p>Name = {student.StudentName}, ID={student.StudentID}, Grade={student.Grade}, Weight={student.Weight}, Height={student.Height}</p>" Return content End Function End Class Public Class DatabaseContext Inherits DbContext Public Property Students() As DbSet(Of Student) Protected Overrides Sub OnConfiguring(ByVal optionsBuilder As DbContextOptionsBuilder) optionsBuilder.UseSqlite("Filename=IronPdfDemo.db") End Sub End Class Public Class Student Public Property StudentID() As Integer Public Property StudentName() As String Public Property DateOfBirth() As DateTime? Public Property Height() As Decimal Public Property Weight() As Single Public Property Grade() As Integer End Class End Namespace $vbLabelText $csharpLabel 代碼說明 設置渲染器和內容: 代碼以創建一個包含一個標題(<h1>)和副標題(<h2>)的HTML內容字符串開始,用於向數據庫中添加學生。 目標是使用IronPDF生成一個PDF文檔,其中包括關於學生的信息。 數據庫上下文和添加學生: 使用DatabaseContext類與數據庫交互。 client.Database.EnsureCreated();保證數據庫和表格的存在。 client.Students.ExecuteDelete();清除Students表中任何現有數據。 定義學生並添加到數據庫中。 屬性包括StudentName、DateOfBirth、Height、Weight和Grade。 client.SaveChanges();將更改保存到數據庫中。 顯示學生: 使用client.Students.ToList();檢索所有學生。 對於每一個學生,他們的名字、ID、分數、體重和身高都會顯示出來,並將該信息添加到HTML內容中。 渲染到PDF: 實例化ChromePdfRenderer。 使用renderer.RenderHtmlAsPdf(content)將HTML內容渲染成PDF。 最後,保存PDF為"AwesomeEfCoreAndIronPdf.pdf"。 輸出 PDF IronPDF 許可證 IronPDF包需要許可證來運行並生成PDF。 試用授權可以在 IronPDF 的試用授權頁面 上獲得。 IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY"; IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY"; IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 試用許可證可從IronPDF許可證頁面獲得。 結論 C#中的Entity Framework Core提供了一種強大而直觀的方式與數據庫交互,提供了像LINQ支持、數據庫遷移和事務管理等開箱即用的功能。 通過遵循最佳實踐並利用其強大功能,開發人員可以輕鬆構建可擴展且可維護的應用程序。 無論您是經驗豐富的開發人員還是剛剛起步,EF Core都是您工具箱中一個寶貴的現代數據訪問工具。 另一方面,IronPDF是一個.NET庫,用於在應用程序中創建、操作和渲染PDF文檔。 您可以將它與EF Core一起使用,以將HTML內容(包括圖像)轉換為PDF文件。 常見問題解答 什麼是Entity Framework Core,它為什麼有用? Entity Framework Core(EF Core)是一種開源的輕量級ORM(物件關聯映射)工具,可以讓開發人員透過.NET物件與資料庫交互,簡化資料存取,消除手動編寫SQL查詢的需要。 如何在.NET專案中將HTML內容轉換為PDF? 您可以使用IronPDF,一個.NET函式庫,將HTML內容(包括從資料庫檢索的資料)轉換為PDF文件。它允許在C#應用程式中無縫整合資料處理與文件生成。 EF Core如何處理資料庫遷移? EF Core提供資料庫遷移功能,允許開發人員利用code-first遷移以累加方式對資料庫架構進行更改,確保資料庫結構與應用程式的資料模型對齊。 使用EF Core中的延遲載入和預先載入有什麼好處? 延遲載入和預先載入是EF Core中用來優化資料檢索效能的策略。延遲載入按需載入相關資料,而預先載入則提前檢索相關資料以減少所需查詢數量。 EF Core如何管理交易? EF Core支持顯式交易管理,確保一系列資料庫操作要么全部成功,要么全部失敗,從而在整個過程中維持資料的穩定性和完整性。 使用EF Core的最佳實踐是什麼? EF Core的最佳實踐包括將DbContext實例範圍限於單一請求,對於唯讀操作使用AsNoTracking以提高性能,優化查詢並避免N+1查詢問題。 如何將IronPDF與EF Core一起使用? IronPDF可以與EF Core一起使用,用於將HTML內容(包括EF Core管理的資料庫資料)生成PDF文件。此組合允許在.NET應用程式中進行高效的資料管理和文件生成。 在專案中使用.NET函式庫生成PDF需要什麼? 要使用IronPDF,您需要透過NuGet安裝IronPDF套件並擁有有效的授權金鑰。試用授權可以從IronPDF Licensing Page獲得。 EF Core如何支持資料查詢? EF Core支持LINQ查詢,允許開發人員使用C#語法撰寫強類型查詢。它還允許執行原始SQL語句以進行更複雜的資料操作。 如何在.NET應用程式中開始使用EF Core? 要開始使用EF Core,請設置一個Console或ASP.NET應用程式,安裝必要的NuGet套件,如Microsoft.EntityFrameworkCore,定義資料模型,配置資料庫連接,並創建DbContext以管理資料操作。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 相關文章 更新日期 9月 4, 2025 RandomNumberGenerator C# 使用RandomNumberGenerator C#類可以幫助將您的PDF生成和編輯項目提升至新水準 閱讀更多 更新日期 9月 4, 2025 C#字符串等於(它如何對開發者起作用) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 更新日期 8月 5, 2025 C#開關模式匹配(對開發者來說是如何工作的) 當結合使用強大的PDF庫IronPDF時,開關模式匹配可以讓您構建更智能、更清晰的邏輯來進行文檔處理 閱讀更多 AutoFixture C#(對開發者如何理解的工作)FluentEmail C#(對開發者如何...