實體框架:全局禁用刪除

asp.net entity-framework entity-framework-core

我們正在開始一個新的應用程序我們想要使用Entity Framework。我們不小心害怕意外刪除sql行(特別是通過意外設置相關數據等)

我想禁用每個刪除,因為我們只用“validUntil”列標記每一行,從不刪除行。

我看到它可以通過sql中的角色完成 ,但我希望所有邏輯和控件都只是在代碼中。

也許在Entity Framework核心中有新功能可以實現嗎?我知道它仍然可以用EF寫行sql,但我們不怕這種情況。

我也嘗試刪除實體關係的setter更加放鬆,但它打破了EF的正常功能,並且看起來不是一個好主意。

我在上面的鏈接中看到了使用存儲庫模式的建議,但在這裡它看起來不是很好的做法。

我如何安全地使用EF?謝謝!

熱門答案

角色選項是單向的,但您也可以覆蓋SaveChanges

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

    base.SaveChanges();
}

編輯

我在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
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow