.NET 帮助

实体框架核心(开发者如何使用)

发布 2024年八月13日
分享:

介绍

在现代软件开发领域,高效的数据管理至关重要。 无论是构建简单的应用程序还是复杂的企业系统,有效地访问、操作和保存数据都是一项基本要求。 实体框架核心(EF 核心).NET、Java、Python 或 Node js 中的 C# 是一种功能强大的工具,它通过提供方便的面向对象方法来处理数据库,从而简化了数据访问。 在本文中,我们将深入了解 EF Core 的世界,探索其特性、功能和最佳实践。 此外,我们还将了解用于处理 PDF 文档的 IronPDF铁软解决方案该译文的目的是帮助开发人员阅读、编写和管理 PDF 文档。 我们将用这两个软件包创建一个实用示例。

了解实体框架核心

Entity Framework Core 是流行的 Entity Framework 数据访问技术的开源、轻量级和可扩展版本。 它旨在跨平台工作,支持现有的各种数据库服务器提供商,包括 SQL Server、SQLite、MySQL、PostgreSQL、Azure Cosmos DB 等。 EF Core 是一种现代对象数据库映射器,遵循 ORM(对象关系映射)模式,允许开发人员使用 .NET 对象处理数据库,从而无需手动编写繁琐的 SQL 查询。

EF Core 的主要功能

  1. 实体建模: EF Core 使开发人员能够使用 Plain Old CLR Objects 定义数据模型(POCOs). 这些实体类表示数据库表,其属性映射到表列。

  2. 支持 LINQ: EF Core 无缝支持 LINQ 查询(语言综合查询)例如,《SQL Server for .NET》允许开发人员使用熟悉的 C# 语法针对 SQL Server 或任何其他数据库编写强类型查询。 这将使数据查询更加直观,并降低运行时出错的可能性。 此外,原始 SQL 语句可与 LINQ 查询一起使用。

  3. 数据库迁移: 管理数据库模式更改是一项具有挑战性的工作,尤其是在团队环境中。 EF Core 通过提供数据库迁移功能简化了这一过程,允许开发人员使用代码优先迁移功能对数据库模式进行增量更改。

  4. 懒加载和急迫加载: EF Core 支持懒加载和急迫加载策略,使开发人员能够根据使用情况,按需或提前加载相关数据,从而优化性能。

  5. 事务管理: 事务可确保数据库操作过程中的数据一致性和完整性。 EF Core 允许开发人员显式地处理事务,确保一组数据库操作要么一起成功,要么一起失败。

  6. 并发控制: EF Core 提供管理并发冲突的内置支持,允许开发人员检测和解决多个用户同时尝试修改相同数据时可能出现的冲突。

EF Core 入门

让我们创建一个使用 SQLite 和 Entity Framework Core 的基本示例(EF 核心)在 ASP.NET Core 应用程序中。 具体步骤如下

  1. 创建您的应用程序

    • 首先创建一个控制台或 ASP.Net 应用程序。
  2. 安装必要的软件包

    • 将以下 NuGet 软件包添加到您的项目中:

      • Microsoft.EntityFrameworkCore(1.0.0 或更高版本)
      • Microsoft.EntityFrameworkCore.Sqlite(1.0.0 或更高版本)
  3. 创建您的数据库上下文

    • 为您的数据库上下文定义一个类(例如,DatabaseContext)DbContext 继承自 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
VB   C#
  1. 注册上下文

    • 在您的 "启动 "类中,为服务添加您的上下文:
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
VB   C#
  1. 启动时创建数据库

    • 在启动构造函数中,创建您的数据库:
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
VB   C#
  1. 在应用程序中使用 SQLite

    • 现在,您可以通过 EF Core 在 ASP.NET Core 应用程序中使用 SQLite。
    • 定义模型并使用 DatabaseContext 与数据库交互。

    请记住,这只是一个基本示例,还有其他配置连接字符串和使用 EF Core 的方法。 您可以自由探索更多高级功能,并根据您的具体需求进行调整。!

EF 核心开发的最佳实践

  1. Keep DbContext Scoped: EF Core 中的 DbContext 实例设计为短期使用,通常应在 Web 应用程序中的单个请求的生命周期内使用。

  2. 在只读操作中使用 AsNoTracking: 在执行预计不会修改实体的只读操作时,使用 AsNoTracking 方法绕过变更跟踪以提高性能。

  3. 优化查询: 通过使用适当的索引、分页和过滤技术来编写高效查询,以尽量减少从数据库检索的数据量。

  4. 避免 N+1 查询问题: 注意 N+1 查询问题,即对集合中的每个相关实体执行查询。 使用急迫加载或显式加载来高效获取相关数据。

  5. 监控性能: 使用 Entity Framework Profiler 等工具或内置日志功能监控 EF Core 性能,以识别并解决性能瓶颈。

IronPDF 简介

Entity Framework Core(开发人员如何使用它):图1 - IronPDF

IronPDF 是一个功能强大的 C# PDF 库,可让您在 .NET 项目中生成、编辑和提取 PDF 文档中的内容。 以下是一些主要特点:

  1. HTML 转换为 PDF**:

    • 将 HTML、CSS 和 JavaScript 内容转换为 PDF 格式。

    • 使用 Chrome 渲染引擎制作像素完美的 PDF。
    • 从 URL、HTML 文件或 HTML 字符串生成 PDF。
  2. 图像和内容转换

    • 将图像转换成 PDF 或从 PDF 转换成图像。

    • 从现有 PDF 文件中提取文本和图像。
    • 支持各种图像格式。
  3. 编辑和处理

    • 设置 PDF 的属性、安全性和权限。

    • 添加数字签名。
    • 编辑元数据和修订历史。
  4. 跨平台支持

    • 适用于 .NET Core(8、7、6、5 和 3.1+), .NET 标准(2.0+)和 .NET Framework(4.6.2+).

    • 兼容 Windows、Linux 和 macOS。
    • 在 NuGet 上提供,便于安装。

使用 IronPDF 和 EF Core 生成 PDF 文档

首先,使用 Visual Studio 创建一个控制台应用程序,如下所示。

实体框架核心(开发者如何使用):图2 - 新项目

提供项目名称。

Entity Framework Core(开发人员如何工作):图3 - 项目配置

提供 .NET 跨平台版本。

实体框架核心(它如何为开发人员工作):图4 - 框架

安装 Microsoft.EntityFrameworkCore 软件包。

Entity Framework Core(开发人员如何使用):图 5 - Microsoft.EntityFrameworkCore 包

安装 Microsoft.EntityFrameworkCore.SqlLite 软件包。

Entity Framework Core(开发人员如何使用):图6 - Microsoft.EntityFrameworkCore.SqlLite 程序包

安装 IronPDF 软件包。

实体框架核心(对于开发人员的工作原理):图7 - IronPDF

在 Program.cs 中添加以下代码。

using Microsoft.EntityFrameworkCore;
using System.Xml.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();
            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
                client.Students.ExecuteDelete(); // ensure clean table
                var stud1 = new Student { StudentName = "Bill", DateOfBirth = new DateTime(1990, 12, 01), Height = 5.45M, Weight = 56, Grade = 10 };
                content = AddStudent(content, stud1);
                var stud2 = new Student { StudentName = "Mike", DateOfBirth = new DateTime(1992, 12, 06), Height = 4.45M, Weight = 34, Grade = 8 };
                content = AddStudent(content, stud2);
                var stud3 = new Student { StudentName = "Peter", DateOfBirth = new DateTime(1990, 12, 03), Height = 5.0M, Weight = 50, Grade = 10 };
                content = AddStudent(content, stud3);
                var stud4 = new Student { StudentName = "Bob", DateOfBirth = new DateTime(1990, 12, 09), Height = 4.56M, Weight = 56, Grade = 10 };
                content = AddStudent(content, stud4);
                var stud5 = new Student { StudentName = "Harry", DateOfBirth = new DateTime(1990, 12, 21), Height = 5.6M, Weight = 56, Grade = 10 };
                content = AddStudent(content, stud5);
                var stud6 = new Student { StudentName = "Charle", DateOfBirth = new DateTime(1993, 12, 11), Height = 5.5M, Weight = 56, Grade = 7 };
                content = AddStudent(content, stud6);
                client.Students.Add(stud1);
                client.Students.Add(stud2);
                client.Students.Add(stud3);
                client.Students.Add(stud4);
                client.Students.Add(stud5);
                client.Students.Add(stud6);
                client.SaveChanges();
            }
            content += "<h2>Display Students in Database</h2>";
            // Display Students in Database
            using (var client = new DatabaseContext())
            {
                Console.WriteLine($"Display Stduents in Database");
                var students = client.Students.ToList();
                foreach (var student in students)
                {
                    Console.WriteLine($"Name= {student.StudentName},ID={student.StudentID},G={student.Grade},W={student.Weight},H={student.Height}");
                    content = AddStudent(content, student);
                }
            }           
            var pdf = renderer.RenderHtmlAsPdf(content);
            // Export to a file or Stream
            pdf.SaveAs("AwesomeEfCoreAndIronPdf.pdf");
        }
        private static string AddStudent(string content, Student student)
        {
            content += $"<p>Name = {student.StudentName},ID={student.StudentID},G={student.Grade},W={student.Weight},H={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 Microsoft.EntityFrameworkCore;
using System.Xml.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();
            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
                client.Students.ExecuteDelete(); // ensure clean table
                var stud1 = new Student { StudentName = "Bill", DateOfBirth = new DateTime(1990, 12, 01), Height = 5.45M, Weight = 56, Grade = 10 };
                content = AddStudent(content, stud1);
                var stud2 = new Student { StudentName = "Mike", DateOfBirth = new DateTime(1992, 12, 06), Height = 4.45M, Weight = 34, Grade = 8 };
                content = AddStudent(content, stud2);
                var stud3 = new Student { StudentName = "Peter", DateOfBirth = new DateTime(1990, 12, 03), Height = 5.0M, Weight = 50, Grade = 10 };
                content = AddStudent(content, stud3);
                var stud4 = new Student { StudentName = "Bob", DateOfBirth = new DateTime(1990, 12, 09), Height = 4.56M, Weight = 56, Grade = 10 };
                content = AddStudent(content, stud4);
                var stud5 = new Student { StudentName = "Harry", DateOfBirth = new DateTime(1990, 12, 21), Height = 5.6M, Weight = 56, Grade = 10 };
                content = AddStudent(content, stud5);
                var stud6 = new Student { StudentName = "Charle", DateOfBirth = new DateTime(1993, 12, 11), Height = 5.5M, Weight = 56, Grade = 7 };
                content = AddStudent(content, stud6);
                client.Students.Add(stud1);
                client.Students.Add(stud2);
                client.Students.Add(stud3);
                client.Students.Add(stud4);
                client.Students.Add(stud5);
                client.Students.Add(stud6);
                client.SaveChanges();
            }
            content += "<h2>Display Students in Database</h2>";
            // Display Students in Database
            using (var client = new DatabaseContext())
            {
                Console.WriteLine($"Display Stduents in Database");
                var students = client.Students.ToList();
                foreach (var student in students)
                {
                    Console.WriteLine($"Name= {student.StudentName},ID={student.StudentID},G={student.Grade},W={student.Weight},H={student.Height}");
                    content = AddStudent(content, student);
                }
            }           
            var pdf = renderer.RenderHtmlAsPdf(content);
            // Export to a file or Stream
            pdf.SaveAs("AwesomeEfCoreAndIronPdf.pdf");
        }
        private static string AddStudent(string content, Student student)
        {
            content += $"<p>Name = {student.StudentName},ID={student.StudentID},G={student.Grade},W={student.Weight},H={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; }
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

代码解释

  1. 设置渲染器和内容:

    • 代码首先要创建一个 HTML 内容字符串。 它以标题

      开头,并添加了一个小标题

      ,用于将学生添加到数据库中。

    • 目标似乎是使用 IronPDF 生成 PDF 文档,其中将包括学生信息。
  2. 数据库上下文和添加学生:

    • DatabaseContext 类用于与数据库交互。
    • client.Database.EnsureCreated(); 确保数据库表存在。
    • client.Students.ExecuteDelete(); 清除学生表中的任何现有数据。
    • 一名新生(stud1)学生姓名、出生日期、身高、体重和年级等属性。
    • client.Students.Add(stud1); 将该学生添加到数据库中。
    • client.SaveChanges(); 将更改保存到数据库。
  3. 展示学生:

    • 然后,代码将显示数据库中的学生。

    • 使用 client.Students.ToList 检索所有学生();.

    • 对于每个学生,它都会打印出他们的姓名、身份证号、年级、体重和身高。
    • 此外,AddStudent 函数被调用为(未显示在此代码片段中).
  4. 渲染为 PDF:

    • ChromePdfRenderer 已实例化。

    • 使用 renderer.RenderHtmlAsPdf 将 HTML 内容渲染为 PDF 文件(内容).
    • 最后,将 PDF 保存为 "AwesomeEfCoreAndIronPdf.pdf"。

输出

实体框架核心(它如何为开发者工作):图 8 - 控制台输出

PDF

Entity Framework Core(开发人员是如何使用的):图 9 - PDF 输出

IronPDF 许可

IronPdf 软件包需要许可证才能运行和生成 PDF。 在访问软件包之前,在应用程序的开头添加以下代码。

IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

试用许可证可从IronPDF 许可页面.

结论

C# 中的 Entity Framework Core 提供了与数据库交互的强大而直观的方式,提供了诸如 LINQ 支持、数据库迁移和开箱即用的事务管理等功能。 通过遵循最佳实践并利用其强大的功能,开发人员可以轻松构建可扩展、可维护的应用程序。 无论您是经验丰富的开发人员还是刚刚入门,EF Core 都是您工具包中的宝贵工具,可用于 C# 应用程序中的现代数据访问。 另一方面,IronPDF 是一个 .NET 库,用于在应用程序中创建、操作和渲染 PDF 文档。 您可以将它与 EF Core 一起用于转换 HTML 内容(包括图像)翻译成 PDF 文件。

< 前一页
AutoFixture C#(开发者如何使用)
下一步 >
FluentEmail C#(开发者如何使用)

准备开始了吗? 版本: 2024.12 刚刚发布

免费NuGet下载 总下载量: 11,781,565 查看许可证 >