在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
在现代软件开发领域,高效的数据管理至关重要。无论是构建一个简单的应用程序还是复杂的企业系统,有效地访问、操作和保存数据都是基本要求。Entity Framework Core (EF 核心) 在C#中是一个强大的工具,通过提供方便的面向对象的方法来简化数据访问。在本文中,我们将深入探讨EF Core的世界,探索其功能、能力和最佳实践。此外,我们还将看看 IronPDF 从 铁软件(Iron Software) 读取、编写和管理PDF文档。我们将使用这两个软件包创建一个实际的示例。
Entity Framework Core是一种开源的、轻量级的、可扩展的版本,源自于流行的Entity Framework数据访问技术。它被设计为跨平台工作,支持各种现有的数据库服务器提供程序,包括SQL Server、SQLite、MySQL、PostgreSQL、Azure Cosmos DB等。EF Core是一个现代对象数据库映射器,并且遵循ORM。 (对象关系映射) 模式,允许开发人员使用 .NET 对象处理数据库,从而无需手动编写繁琐的 SQL 查询。
建模实体: EF Core 使开发人员能够使用普通旧 CLR 对象定义数据模型 (POCOs). 这些实体类代表数据库表,属性映射到表的列。
LINQ 支持: EF Core 无缝支持 LINQ 查询 (语言综合查询)允许开发人员使用熟悉的C#语法对SQL Server或任何其他数据库编写强类型查询。这样可以使查询数据变得直观,并减少运行时错误的可能性。此外,还可以将原始SQL语句与LINQ查询一起使用。
数据库迁移: 管理数据库模式变更可能很具挑战性,特别是在团队环境中。EF Core通过提供数据库迁移功能简化了这一过程,使开发人员能够使用代码优先迁移对数据库模式进行增量更改。
惰性加载和急加载: EF Core支持惰性加载和急加载策略,使开发人员可以根据使用情况按需或预先加载相关数据,从而优化性能。
事务管理: 事务确保数据库操作期间数据的一致性和完整性。EF Core允许开发人员显式地处理事务,确保一组数据库操作要么一起成功,要么一起失败。
让我们创建一个使用 SQLite 和 Entity Framework Core 的基本示例 (EF 核心) 在ASP.NET Core应用程序中。以下是步骤:
创建您的应用程序:
安装必要的软件包:
向您的项目添加以下NuGet包:
Microsoft.EntityFrameworkCore (1.0.0 或更高版本)
在 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
注册上下文:
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
请记住,这是一个基本示例,还有其他方法来配置连接字符串和使用EF Core。请随意探索更高级的功能,并根据您的具体需求进行调整。!
保持 DbContext 的短生命周期: EF Core 中的 DbContext 实例设计为短生命周期,通常应限定为 Web 应用程序中单个请求的生命周期。
对只读操作使用 AsNoTracking: 当执行不需要修改实体的只读操作时,使用 AsNoTracking 方法通过绕过更改跟踪来提高性能。
优化查询: 通过使用适当的索引、分页和过滤技术,编写高效的查询以最小化从数据库检索的数据量。
避免 N+1 查询问题: 注意 N+1 查询问题,即为集合中的每个相关实体执行查询。使用急切加载或显式加载来有效地获取相关数据。
IronPDF 是一个强大的 C# PDF 库,允许您在 .NET 项目中生成、编辑和提取 PDF 文档的内容。以下是一些主要功能:
HTML 到 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
设置渲染器和内容:
代码首先创建一个HTML内容字符串。它从一个标题
数据库上下文和添加学生:
DatabaseContext 类用于与数据库交互。
client.Database.EnsureCreated(); 确保数据库表存在。
client.Students.ExecuteDelete(); 清空 Students 表中的任何现有数据。
新学生 (stud1) 使用诸如 StudentName、DateOfBirth、Height、Weight 和 Grade 等属性创建。
client.SaveChanges
```()将更改保存到数据库。
3. **显示学生:**
* 然后,代码显示数据库中的学生。
* 它使用 `client.Students.ToList` 检索所有学生。();.
* 对于每个学生,打印他们的姓名、ID、成绩、体重和身高。
* 另外,调用 AddStudent 函数 (未显示在此代码片段中).
4. **渲染为 PDF:**
* 实例化 ChromePdfRenderer。
* 使用 renderer.RenderHtmlAsPdf 将 HTML 内容渲染为 PDF。(内容)最后,PDF保存为“AwesomeEfCoreAndIronPdf.pdf”。
## 输出
![实体框架核心(它如何为开发者工作):图 8 - 控制台输出](/static-assets/pdf/blog/entity-framework-core/entity-framework-core-8.webp)
### PDF
![Entity Framework Core(开发人员是如何使用的):图 9 - PDF 输出](/static-assets/pdf/blog/entity-framework-core/entity-framework-core-9.webp)
## IronPDF 许可
IronPDF 软件包需要许可证才能运行并生成 PDF。在访问软件包之前,请在应用程序的开头添加以下代码。
```cs
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
client.SaveChanges
```()将更改保存到数据库。
3. **显示学生:**
* 然后,代码显示数据库中的学生。
* 它使用 `client.Students.ToList` 检索所有学生。();.
* 对于每个学生,打印他们的姓名、ID、成绩、体重和身高。
* 另外,调用 AddStudent 函数 (未显示在此代码片段中).
4. **渲染为 PDF:**
* 实例化 ChromePdfRenderer。
* 使用 renderer.RenderHtmlAsPdf 将 HTML 内容渲染为 PDF。(内容)最后,PDF保存为“AwesomeEfCoreAndIronPdf.pdf”。
## 输出
![实体框架核心(它如何为开发者工作):图 8 - 控制台输出](/static-assets/pdf/blog/entity-framework-core/entity-framework-core-8.webp)
### PDF
![Entity Framework Core(开发人员是如何使用的):图 9 - PDF 输出](/static-assets/pdf/blog/entity-framework-core/entity-framework-core-9.webp)
## IronPDF 许可
IronPDF 软件包需要许可证才能运行并生成 PDF。在访问软件包之前,请在应用程序的开头添加以下代码。
```cs
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
client.SaveChanges ```()将更改保存到数据库。 3. **显示学生:** * 然后,代码显示数据库中的学生。 * 它使用 `client.Students.ToList` 检索所有学生。()
## 输出
### PDF
## IronPDF 许可
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'. * 对于每个学生,打印他们的姓名、ID、成绩、体重和身高。 * 另外,调用 AddStudent 函数(未显示在此代码片段中). 4. **渲染为 PDF:** * 实例化 ChromePdfRenderer。 * 使用 renderer.RenderHtmlAsPdf 将 HTML 内容渲染为 PDF。(内容)最后,PDF保存为"AwesomeEfCoreAndIronPdf.pdf”。 ![实体框架核心(它如何为开发者工作):图 8 - 控制台输出](/static-assets/pdf/blog/entity-framework-core/entity-framework-core-8.webp) ![Entity Framework Core(开发人员是如何使用的):图 9 - PDF 输出](/static-assets/pdf/blog/entity-framework-core/entity-framework-core-9.webp) IronPDF 软件包需要许可证才能运行并生成 PDF。在访问软件包之前,请在应用程序的开头添加以下代码。 ```cs IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
试用许可证可用 这里.
C#中的Entity Framework Core提供了一种强大且直观的方式与数据库交互,具备如LINQ支持、数据库迁移和事务管理等开箱即用的功能。通过遵循最佳实践并利用其强大的功能,开发者可以轻松构建可扩展且易维护的应用程序。无论您是经验丰富的开发者还是刚入门,EF Core都是您在C#应用程序中进行现代化数据访问的宝贵工具。另一方面,IronPDF是一个用于在应用程序中创建、操作和渲染PDF文档的.NET库。您可以将它与EF Core一起使用,以转换HTML内容。 (包括图像) 成PDF文件。