エンティティフレームワーク:グローバルに削除を無効にする

asp.net entity-framework entity-framework-core

質問

私たちは新しいアプリケーションを開始しています。 Entity Frameworkを使いたい。誤ってSQL行を削除することを恐れていません(特に関連データを誤って設定するなど)

私はすべての行を "validUntil"列でマークし、行を決して削除しないので、すべての削除を無効にすることを考えました。

私はそれがSQLでの役割でできていることを知っていましたが 、私はすべてのロジックとコントロールがちょうどコードであることを望んでいます。

おそらくEntity Frameworkのコアにそれを可能にする新しい機能がありますか?私はまだEFで行sqlを書くことができることを知っているが、我々はそのような場合を恐れない。

私はエンティティ関係のセッターをもっとリラックスさせるために取り除いてみましたが、EFの通常の機能を破り、良いアイデアのようには見えませんでした。

私は上記のリンクでリポジトリパターンを使用するよう勧告しましたが、 ここではそれは良い習慣ではないようです。

EFで安全に働くにはどうすればいいですか?ありがとう!

人気のある回答

ロールオプションは1つの方法ですが、 SaveChangesをオーバーライドすることもできます。

public override int SaveChanges()
{
    foreach (DbEntityEntry entity in this.ChangeTracker.Entries)
    {
        if (entity.State == System.Data.EntityState.Deleted)
            return;        
    }

    base.SaveChanges();
}

EDIT

私はgitでEF Coreを読む:

すべてのリレーションシップの削除動作を変更する場合は、このコードをOnModelCreating(...)で使用して、モデル内のすべてのリレーションシップに対して一括して設定します。

foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
{
    relationship.DeleteBehavior = DeleteBehavior.Restrict;
}


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ