实体框架:全局禁用删除

2024-02-15

我们正在开始一个新的应用程序。我们想使用实体框架。我们很少担心意外删除sql行(特别是意外设置相关数据等)

我想禁用每个删除,因为我们只是用“validUntil”列标记每一行并且从不删除行。

I saw 它可以通过 sql 中的角色来完成 https://stackoverflow.com/q/20309150/3202422,但我希望所有逻辑和控制都只在代码中。

也许在实体框架核心中有新功能可以实现这一点?我知道它仍然可以用EF写行sql,但我们不怕这种情况。

我还尝试删除实体关系的设置器以更加放松,但它破坏了 EF 的正常功能,并且看起来不是一个好主意。

我在上面的链接中看到了使用存储库模式的建议,但是here https://softwareengineering.stackexchange.com/a/220126看起来这不是一个好的做法。

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


角色选项是一种方法,但您也可以覆盖保存更改 https://msdn.microsoft.com/en-us/library/cc716714(v=vs.100).aspx.

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 https://github.com/aspnet/EntityFramework/issues/3815:

如果您想更改所有关系的删除行为,那么 您可以在 OnModelCreating(...) 中使用此代码为所有对象批量设置它 模型中的关系。

foreach (var relationship in modelBuilder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
{
    relationship.DeleteBehavior = DeleteBehavior.Restrict;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架:全局禁用删除 的相关文章

随机推荐