在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在現代軟體開發領域,有效的資料管理至關重要。無論您是在構建一個簡單的應用程式還是一個複雜的企業系統,高效地存取、操作和儲存資料都是基本的要求。Entity Framework Core (EF Core) 在 C# 中, 是一個強大的工具,透過提供方便且面向物件的方法來簡化資料存取。在本文中,我們將深入探討 EF Core 的世界,探索其功能、能力和最佳實踐。此外,我們還將一覽 IronPDF 從 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 通過提供數據庫遷移功能簡化了這一過程,允許開發人員使用程式碼優先遷移方法對數據庫模式進行增量更改。
延遲加載和急載: EF Core 支持延遲加載和急載策略,使開發人員能夠根據使用情況按需或預先加載相關數據,從而優化性能。
交易管理: 交易在數據庫操作期間確保數據的一致性和完整性。EF Core 允許開發人員明確地使用交易,確保一組數據庫操作要麼一起成功,要麼一起失敗。
讓我們創建一個使用 SQLite 與 Entity Framework Core 的基本範例 (EF Core) 在 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 在您的 ASP.NET Core 應用程式中使用 SQLite。
* 定義您的模型並使用 DatabaseContext 與資料庫互動。
請記住,這是一個基本範例,還有其他方式來配置連接字串並使用 EF Core。隨時探索更高級的功能並根據您的具體需求進行調整。!
將 DbContext 設置為範圍: 在 EF Core 中,DbContext 實例設計為短暫的,應該通常範圍限定於網頁應用程式中的一次請求生命週期。
針對只讀操作使用 AsNoTracking: 當執行只讀操作時,不期望實體被修改,使用 AsNoTracking 方法可通過繞過變更跟踪來提高性能。
優化查詢: 通過使用適當的索引、分頁和過濾技術來撰寫高效的查詢,減少從資料庫檢索的數據量。
避免 N+1 查詢問題: 注意 N+1 查詢問題,這是指對集合中的每個相關實體執行一次查詢。使用積極加載或顯式加載來高效地獲取相關數據。
IronPDF 是一個強大的 C# PDF 庫,允許在 .NET 專案中生成、編輯和提取 PDF 文件的內容。以下是一些主要功能:
HTML 到 PDF 轉換:
將 HTML、CSS 和 JavaScript 內容轉換為 PDF 格式。
使用 Chrome 渲染引擎生成像素完美的 PDF。
圖像和內容轉換:
圖像與 PDF 之間的轉換。
從現有的 PDFs 提取文本和圖像。
編輯和操作:
設定 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
設置渲染器和內容:
代碼首先創建了一個 HTML 內容字符串。它以標題
數據庫上下文和添加學生:
DatabaseContext 類用於與數據庫交互。
client.Database.EnsureCreated(); 確保資料庫表存在。
client.Students.Add(stud1); 將此學生新增到資料庫中。
顯示學生:
client.Students.ToList
檢索所有學生。();.此外,還會調用 AddStudent 函數 (此程式碼片段中未顯示).
渲染為PDF:
IronPDF 套件需要授權才能運行及生成 PDF。請在應用程式開始時加入以下程式碼,然後再存取該套件。
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY";
IRON VB CONVERTER ERROR developers@ironsoftware.com
試用許可證可用 這裡.
Entity Framework Core 在 C# 提供了一種強大且直觀的方式來與數據庫交互,提供了如 LINQ 支持、數據庫遷移和事務管理等特性。通過遵循最佳實踐並利用其強大的功能,開發人員可以輕鬆構建可擴展且易於維護的應用程式。無論你是一名經驗豐富的開發人員還是剛剛起步,EF Core 都是你工具箱中一個寶貴的工具,用於現代數據訪問 C# 應用程式。另一方面,IronPDF 是一個 .NET 庫,用於在你的應用程式中創建、操作和渲染 PDF 文檔。你可以將它與 EF Core 一起使用來轉換 HTML 內容。 (包含圖片) 到 PDF 文件中。