在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在現代軟體開發領域,有效的數據管理至關重要。 無論您是在構建一個簡單的應用程式還是複雜的企業系統,能夠有效地存取、操作和保存資料都是一個基本的要求。 Entity Framework Core(EF Core)在 C# 中,是一個強大的工具,透過提供便捷且面向物件的方法來簡化資料存取,讓與資料庫的互動更加容易。 在本文中,我們將深入探討EF Core的世界,探索其功能、能力和最佳實踐。 此外,我們將查看IronPDF 用於處理 PDF 文件從IronSoftware 解決方案讀取、編寫和管理 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 透過提供資料庫遷移功能來簡化此過程,允許開發人員使用 Code-First 遷移對資料庫架構進行增量更改。
延遲加載和積極加載: EF Core 支援延遲加載和積極加載兩種策略,使開發人員能根據使用案例,通過按需或事先加載相關數據來優化性能。
交易管理: 交易在資料庫操作過程中確保資料的一致性和完整性。 EF Core 允許開發者明確地處理交易,確保一組資料庫操作要麼一起成功,要麼一起失敗。
讓我們來創建一個使用 Entity Framework Core 與 SQLite 的基本範例(EF Core)在 ASP.NET Core 應用程式中。 這是步驟:
創建您的應用程式:
安裝必要的套件:
將以下 NuGet 套件添加到您的專案中:
建立您的資料庫上下文:
為您的資料庫上下文定義一個類別(例如,資料庫上下文)從 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 實例設計為短暫存在,通常應限定在網絡應用程式中單次請求的生命週期內。
對於唯讀操作使用 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 文件。