在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
在现代软件开发领域,高效的数据管理至关重要。 无论是构建简单的应用程序还是复杂的企业系统,有效地访问、操作和保存数据都是一项基本要求。 实体框架核心(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 使开发人员能够使用 Plain Old CLR Objects 定义数据模型(POCOs). 这些实体类表示数据库表,其属性映射到表列。
支持 LINQ: EF Core 无缝支持 LINQ 查询(语言综合查询)例如,《SQL Server for .NET》允许开发人员使用熟悉的 C# 语法针对 SQL Server 或任何其他数据库编写强类型查询。 这将使数据查询更加直观,并降低运行时出错的可能性。 此外,原始 SQL 语句可与 LINQ 查询一起使用。
数据库迁移: 管理数据库模式更改是一项具有挑战性的工作,尤其是在团队环境中。 EF Core 通过提供数据库迁移功能简化了这一过程,允许开发人员使用代码优先迁移功能对数据库模式进行增量更改。
懒加载和急迫加载: EF Core 支持懒加载和急迫加载策略,使开发人员能够根据使用情况,按需或提前加载相关数据,从而优化性能。
事务管理: 事务可确保数据库操作过程中的数据一致性和完整性。 EF Core 允许开发人员显式地处理事务,确保一组数据库操作要么一起成功,要么一起失败。
让我们创建一个使用 SQLite 和 Entity Framework Core 的基本示例(EF 核心)在 ASP.NET Core 应用程序中。 具体步骤如下
创建您的应用程序:
安装必要的软件包:
将以下 NuGet 软件包添加到您的项目中:
创建您的数据库上下文:
为您的数据库上下文定义一个类(例如,DatabaseContext)DbContext 继承自 DbContext。
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
注册上下文:
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
启动时创建数据库:
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
在应用程序中使用 SQLite:
请记住,这只是一个基本示例,还有其他配置连接字符串和使用 EF Core 的方法。 您可以自由探索更多高级功能,并根据您的具体需求进行调整。!
Keep DbContext Scoped: EF Core 中的 DbContext 实例设计为短期使用,通常应在 Web 应用程序中的单个请求的生命周期内使用。
在只读操作中使用 AsNoTracking: 在执行预计不会修改实体的只读操作时,使用 AsNoTracking 方法绕过变更跟踪以提高性能。
优化查询: 通过使用适当的索引、分页和过滤技术来编写高效查询,以尽量减少从数据库检索的数据量。
避免 N+1 查询问题: 注意 N+1 查询问题,即对集合中的每个相关实体执行查询。 使用急迫加载或显式加载来高效获取相关数据。
IronPDF 是一个功能强大的 C# PDF 库,可让您在 .NET 项目中生成、编辑和提取 PDF 文档中的内容。 以下是一些主要特点:
将 HTML 转换为 PDF**:
将 HTML、CSS 和 JavaScript 内容转换为 PDF 格式。
图像和内容转换:
将图像转换成 PDF 或从 PDF 转换成图像。
编辑和处理:
设置 PDF 的属性、安全性和权限。
跨平台支持:
适用于 .NET Core(8、7、6、5 和 3.1+), .NET 标准(2.0+)和 .NET Framework(4.6.2+).
首先,使用 Visual Studio 创建一个控制台应用程序,如下所示。
提供项目名称。
提供 .NET 跨平台版本。
安装 Microsoft.EntityFrameworkCore 软件包。
安装 Microsoft.EntityFrameworkCore.SqlLite 软件包。
安装 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
设置渲染器和内容:
数据库上下文和添加学生:
展示学生:
然后,代码将显示数据库中的学生。
使用 client.Students.ToList 检索所有学生();.
渲染为 PDF:
ChromePdfRenderer 已实例化。
IronPdf 软件包需要许可证才能运行和生成 PDF。 在访问软件包之前,在应用程序的开头添加以下代码。
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
试用许可证可从IronPDF 许可页面.
C# 中的 Entity Framework Core 提供了与数据库交互的强大而直观的方式,提供了诸如 LINQ 支持、数据库迁移和开箱即用的事务管理等功能。 通过遵循最佳实践并利用其强大的功能,开发人员可以轻松构建可扩展、可维护的应用程序。 无论您是经验丰富的开发人员还是刚刚入门,EF Core 都是您工具包中的宝贵工具,可用于 C# 应用程序中的现代数据访问。 另一方面,IronPDF 是一个 .NET 库,用于在应用程序中创建、操作和渲染 PDF 文档。 您可以将它与 EF Core 一起用于转换 HTML 内容(包括图像)翻译成 PDF 文件。