C#とMySQLでトランザクションを実現する方法

導入

データベーストランザクションは、一連の操作を一つの単位として扱い、全ての操作が完了するか、一つでも失敗した場合には全てを元に戻す(ロールバックする)ための仕組みです。これにより、データの整合性と安全性が保たれます。本記事では、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データベース操作が容易になります。この記事が、より安全で効率的なデータベース管理の実現に役立つことを願っています。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です