導入
データベーストランザクションは、一連の操作を一つの単位として扱い、全ての操作が完了するか、一つでも失敗した場合には全てを元に戻す(ロールバックする)ための仕組みです。これにより、データの整合性と安全性が保たれます。本記事では、C#の.NET8、EFCore8でMySQLデータベースを扱う際のトランザクションの基本的な使い方を解説します。
環境設定
.NET8SDKが必要です。インストールしていない場合は、下記からインストールしてください。
.NET のダウンロード (Linux、macOS、Windows) (microsoft.com)
続いて、プロジェクト作成後、下記のパッケージを追加します。
dotnet add package Microsoft.EntityFrameworkCore dotnet add package MySql.Data.EntityFrameworkCore
DbContextの設定
DbContextを設定し、EF Coreがデータベース操作を行えるようにします。以下のコードを参考にしてください。
今回は簡単のために接続文字列をDbContext に書いていますが、設定ファイル等から読み込めるようにしてください。
using Microsoft.EntityFrameworkCore;
public class MyDbContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseMySQL("server=localhost;database=myDatabase;user=myUser;password=myPassword");
}
}
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public string Position { get; set; }
}トランザクションの開始
EF CoreのDatabaseプロパティを使用してトランザクションを開始し、管理します。
using var context = new MyDbContext();
using var transaction = context.Database.BeginTransaction();
try
{
context.Employees.Add(new Employee { Name = "Jane Doe", Position = "Web Developer" });
context.SaveChanges();
transaction.Commit();
Console.WriteLine("Transaction committed successfully.");
}
catch (Exception ex)
{
transaction.Rollback();
Console.WriteLine($"An error occurred: {ex.Message}");
}2行目でトランザクションを貼っています。
6行目でDbContextに値を追加し、7行目で確定させます。
9行目でトランザクションを完了させます。
13行目で例外があった場合、トランザクションをロールバックさせます。context.SaveChages() 実行後でも、例外が発生すれば、ロールバックさせます。
ベストプラクティス
DbContext、トランザクションを使用する際には、その範囲を最小限にすることが推奨されます。また、エラーハンドリングを適切に行い、予期しない失敗からデータを保護することが重要です。
まとめ
MySql.Data.EntityFrameworkCoreを使用することで、EF Core 8とC#を用いたMySQLデータベース操作が容易になります。この記事が、より安全で効率的なデータベース管理の実現に役立つことを願っています。
