透かしなしで本番環境でテストしてください。
必要な場所で動作します。
30日間、完全に機能する製品をご利用いただけます。
数分で稼働させることができます。
製品トライアル期間中にサポートエンジニアリングチームへの完全アクセス
現代のソフトウェア開発において、効率的なデータ管理は極めて重要である。 シンプルなアプリケーションを構築する場合でも、複雑なエンタープライズ・システムを構築する場合でも、データに効率的にアクセスし、操作し、保存することは基本的な要件です。 C# の Entity Framework Core (EF Core) は、便利でオブジェクト指向のアプローチを提供することでデータベース操作を簡素化する強力なツールです。 この記事では、EF Coreの世界に入り込み、その特徴、機能、ベストプラクティスを探ります。 また、PDFドキュメントを読み書きおよび管理するためのIronPDF for Handling PDF DocumentsをIron Software Solutionsから見ていきます。 両パッケージを使った実践的な例を作成する。
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 クエリ (Language Integrated Query) をシームレスにサポートしており、開発者は慣れ親しんだ C# の構文を使用して SQL Server または他のデータベースに対して強く型付けされたクエリを書くことができます。 これにより、データ照会が直感的になり、実行時エラーの可能性が低くなる。 また、生のSQL文もLINQクエリーと一緒に使うことができる。
データベース移行: チーム環境では、データベーススキーマの変更を管理することが難しい場合があります。 EF Coreはデータベースマイグレーション機能を提供することで、このプロセスを簡素化し、開発者がコードファーストのマイグレーションを使用してデータベーススキーマにインクリメンタルな変更を適用できるようにします。
遅延読み込みと積極的読み込み: EF Coreは、遅延読み込みと積極的読み込みの両方の戦略をサポートしており、使用ケースに応じて関連データをオンデマンドまたは事前に読み込むことで、開発者がパフォーマンスを最適化できるようにします。
トランザクション管理: トランザクションは、データベース操作中のデータの一貫性と整合性を保証します。 EF Coreでは、開発者はトランザクションを明示的に扱うことができ、データベース操作のグループが成功するか失敗するかを一緒に確認できる。
ASP.NET CoreアプリケーションでEntity Framework Core (EF Core)とSQLiteを使用する基本的な例を作成しましょう。 以下の手順を参照してください:
アプリケーションを作成する:
必要なパッケージのインストール:
以下のNuGetパッケージをプロジェクトに追加する:
データベースコンテキストを作成する:
DbContextを継承するデータベースコンテキスト(例:DatabaseContext)用のクラスを定義します。
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は.NETプロジェクトでPDFドキュメントの生成、編集、コンテンツの抽出を可能にする強力なC# 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(); はStudentsテーブルから既存のデータを消去します。
新しい学生(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はアプリケーション内でPDFドキュメントを作成、操作、レンダリングするための.NETライブラリです。 それをEF Coreと一緒に使用して、HTMLコンテンツ(画像を含む)をPDFファイルに変換できます。