.NET 帮助 Entity Framework Core(开发者用法) Curtis Chau 已更新:六月 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(对象-关系映射)模式,允许开发人员使用.NET对象与数据库交互,从而消除了手动编写繁琐SQL查询的需要。 EF Core的关键功能 建模实体: EF Core允许开发人员使用简单的旧CLR对象(POCOs)定义数据模型。 这些实体类代表数据库表,其属性映射到表列。 LINQ支持: EF Core无缝支持LINQ查询(语言集成查询),允许开发人员使用熟悉的C#语法针对SQL Server或任何其他数据库编写强类型查询。 这使得查询数据直观并减少运行时错误的可能性。 此外,可以与LINQ查询一起使用原始SQL语句。 数据库迁移: 管理数据库架构更改可能具有挑战性,特别是在团队环境中。 EF Core通过提供数据库迁移能力简化了这个过程,让开发人员可以使用代码优先迁移应用数据库架构的增量更改。 延迟加载和立即加载: 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或更高) 创建您的数据库上下文: 定义一个继承自DbContext的数据库上下文类(例如,DatabaseContext)。 在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。 从 URL、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和EF Core生成PDF文档 首先,使用 Visual Studio 创建一个控制台应用程序,如下所示。 提供项目名称。 提供.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 代码解释 设置渲染器和内容: 代码开始通过创建一个HTML内容字符串,包含用于将学生添加到数据库的标题(<h1>)和副标题(<h2>)。 目标是使用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.License.LicenseKey = "IRONPDF-MYLICENSE-KEY"; IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY"; IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 可以从获得试用许可证。 结论 C#中的Entity Framework Core提供了一种强大且直观的方式来与数据库交互,提供了诸如LINQ支持、数据库迁移和事务管理等功能。 通过遵循最佳实践并利用其强大的功能,开发人员可以轻松构建可扩展和可维护的应用程序。 无论您是一名经验丰富的开发人员还是刚入门,EF Core都是C#应用程序现代数据访问工具包中的一件有价值的工具。 另一方面,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 提供数据库迁移功能,允许开发人员通过代码优先迁移对数据库架构进行增量更改,确保数据库结构与应用程序的数据模型保持一致。 在 EF Core 中使用延迟加载和预加载的好处是什么? 延迟加载和预加载是 EF Core 中用于优化数据检索性能的策略。延迟加载按需加载关联数据,而预加载则提前检索关联数据,从而减少所需的查询数量。 EF Core 如何管理事务? EF Core 支持显式事务管理,确保一系列数据库操作要么全部成功,要么全部失败,从而在整个过程中保持数据一致性和完整性。 使用 EF Core 的最佳实践是什么? EF Core 的最佳实践包括将 DbContext 实例范围限定为单个请求,使用 AsNoTracking 进行只读操作以提高性能,优化查询,避免 N+1 查询问题。 如何将 IronPDF 与 EF Core 一起使用? IronPDF 可以与 EF Core 一起使用,从 HTML 内容生成 PDF 文档,包括由 EF Core 管理的数据库中的数据。此组合可以在 .NET 应用程序中实现有效的数据管理和文档生成。 在项目中使用 .NET 库生成 PDF 需要什么? 要使用 IronPDF,您需要通过 NuGet 安装 IronPDF 包并拥有有效的许可证密钥。IronPDF 许可页面提供试用许可证。 EF Core 如何支持数据查询? EF Core 支持 LINQ 查询,允许开发人员使用 C# 语法编写强类型查询。它还支持执行原始 SQL 语句以进行更复杂的数据操作。 如何在 .NET 应用程序中开始使用 EF Core? 要开始使用 EF Core,设置一个控制台或 ASP.NET 应用程序,安装必要的 NuGet 包,例如 Microsoft.EntityFrameworkCore,定义您的数据模型,配置数据库连接,并创建一个 DbContext 以管理数据操作。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已更新九月 4, 2025 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多 已更新九月 4, 2025 C# String Equals(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 已更新八月 5, 2025 C# Switch 模式匹配(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 AutoFixture C#(开发者用法)FluentEmail C#(开发者用法)
已更新九月 4, 2025 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多