在生产环境中测试,无水印。
随时随地满足您的需求。
获得30天的全功能产品。
几分钟内就能启动并运行。
在您的产品试用期间,全面访问我们的支持工程团队。
在现代软件开发领域,高效的数据管理至关重要。 无论是构建简单的应用程序还是复杂的企业系统,有效地访问、操作和保存数据都是一项基本要求。 Entity Framework Core(EF Core)在C#中是一种强大的工具,通过提供方便的面向对象的方法来简化数据库访问。 在本文中,我们将深入了解 EF Core 的世界,探索其特性、功能和最佳实践。 此外,我们将查看来自Iron Software Solutions的IronPDF for Handling PDF Documents,以读取、写入和管理PDF文档。 我们将用这两个软件包创建一个实用示例。
Entity Framework Core 是流行的 Entity Framework 数据访问技术的开源、轻量级和可扩展版本。 它旨在跨平台工作,支持现有的各种数据库服务器提供商,包括 SQL Server、SQLite、MySQL、PostgreSQL、Azure Cosmos DB 等。 EF Core 是一种现代对象数据库映射器,遵循 ORM(对象关系映射)模式,使开发人员能够使用 .NET 对象与数据库进行交互,从而无需手动编写繁琐的 SQL 查询。
建模实体:EF Core 使开发人员能够使用简单旧 CLR 对象(POCO)定义数据模型。 这些实体类表示数据库表,其属性映射到表列。
LINQ 支持:EF Core 无缝支持 LINQ 查询(语言集成查询),允许开发人员使用熟悉的 C# 语法针对 SQL Server 或任何其他数据库编写强类型查询。 这将使数据查询更加直观,并降低运行时出错的可能性。 此外,原始 SQL 语句可与 LINQ 查询一起使用。
数据库迁移: 管理数据库模式的变化可能具有挑战性,尤其是在团队环境中。 EF Core 通过提供数据库迁移功能简化了这一过程,允许开发人员使用代码优先迁移功能对数据库模式进行增量更改。
懒加载和预加载:EF Core支持懒加载和预加载策略,使开发人员能够根据具体使用案例,通过按需或预先加载相关数据来优化性能。
事务管理:事务确保数据库操作期间的数据一致性和完整性。 EF Core 允许开发人员显式地处理事务,确保一组数据库操作要么一起成功,要么一起失败。
让我们创建一个在ASP.NET Core应用程序中使用SQLite与Entity Framework Core(EF Core)的基本示例。 具体步骤如下
创建您的应用程序:
安装必要的软件包:
将以下 NuGet 软件包添加到您的项目中:
创建您的数据库上下文:
为您的数据库上下文定义一个类(例如,DatabaseContext),该类继承自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 的方法。 欢迎探索更多高级功能并根据您的具体需求进行调整!
保持 DbContext 作用域:在 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 Standard(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
设置渲染器和内容:
数据库上下文和添加学生:
DatabaseContext 类用于与数据库交互。
client.Database.EnsureCreated(); 确保数据库表存在。
client.Students.ExecuteDelete(); 清除学生表中的任何现有数据。
创建了一个新学生(stud1),具有诸如StudentName、DateOfBirth、Height、Weight和Grade等属性。
显示学生:
然后,代码将显示数据库中的学生。
它使用 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文件。