我试图防止对我的数据库表进行任何删除。目前使用实体框架 5。首先这是我的代码,
public override int SaveChanges()
{
var Changed = ChangeTracker.Entries();
if (Changed != null)
{
foreach (var entry in Changed.Where(e => e.State == EntityState.Deleted))
{
entry.State = EntityState.Unchanged;
}
}
return base.SaveChanges();
}
我已经用这种方法成功阻止了它。当我使用 EF 的删除方法时,它不再起作用。但是,我想要实现的是,当我对给定 ID 使用删除方法时,我想设置 isDeleted(这是我所有数据库中的一个(位)列)表)值为 false。目前,我迷失在互联网上的文档和共享代码中。
Thanks
我可能会通过让可软删除的实体实现一个接口来处理这个问题,比如 ISoftDeletable。
public interface ISoftDeletable
{
bool IsDeleted { get; set; }
}
然后扩展上面的代码以检查实体类型是否实现软删除接口,如果它只是设置已删除为真。
public override int SaveChanges()
{
var Changed = ChangeTracker.Entries();
if (Changed != null)
{
foreach (var entry in Changed.Where(e => e.State == EntityState.Deleted))
{
entry.State = EntityState.Unchanged;
if (entry.Entity is ISoftDeletable)
{
// Set IsDeleted....
}
}
}
return base.SaveChanges();
}
然后,您需要确保对实现 ISoftDeletable 的实体的查询过滤掉那些软删除的实体。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)