ホームページ >バックエンド開発 >C++ >Entity Framework コードで最初に論理的な削除フィルターを実装するにはどうすればよいですか?

Entity Framework コードで最初に論理的な削除フィルターを実装するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-02 21:22:38974ブラウズ

How Can Entity Framework Code First Implement Soft Delete Filtering?

Entity Framework Code First を使用したソフト削除フィルター

Entity Framework Code First では、エンティティにマークを付けることでソフト削除を使用してエンティティを「削除」できます。実際にデータベースから削除するのではなく、削除されたものとして扱います。これは、誤って削除することを防止したり、履歴データを維持したりするシナリオに役立ちます。

論理的な削除に関する課題の 1 つは、データを取得するときに、論理的に削除されたエンティティをどのように自動的に除外するかです。これは、EntityFramework.DynamicFilters パッケージを使用して実現できます。

EntityFramework.DynamicFilters

EntityFramework.DynamicFilters は、自動的に適用されるグローバル フィルターを作成するメカニズムを提供するライブラリです。クエリに。これらのフィルターは、ナビゲーション プロパティを含むエンティティの任意のプロパティに適用できます。

EntityFramework.DynamicFilters を使用するには、次の手順を実行する必要があります。

  1. NuGet からパッケージをインストールします。
  2. 次の行を DbContext に追加しますclass:
public override int SaveChanges(bool acceptAllChangesOnSuccess)
{
    // Soft delete implementation here
    return base.SaveChanges(acceptAllChangesOnSuccess);
}
  1. DbContext の OnModelCreating メソッドで、フィルターを定義します。
modelBuilder.Filter("IsDeleted", (ISoftDelete d) => d.IsDeleted, false);

このフィルターにより、 ISoftDelete インターフェイスには、IsDeleted プロパティの WHERE 句が自動的に含まれます。ただし、IsDeleted が存在するエンティティは除外されます。 true に設定します。

次のコードを考えてみましょう:

public class User : ISoftDelete
{
    public int Id { get; set; }
    public string Name { get; set; }
    public bool IsDeleted { get; set; }
}

public class DbContext : base.DbContext
{
    public DbSet<User> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Filter("IsDeleted", (User u) => u.IsDeleted, false);
    }
}

この構成では、次のコードは、マークされたユーザーを無視します。削除されました:

var user = dbContext.Users.FirstOrDefault(u => u.Id == 1);

以上がEntity Framework コードで最初に論理的な削除フィルターを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。