我试图防止对我的数据库表进行任何删除。当前使用的是Entity Framework5。首先是我的代码,
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的Remove方法时,它不再起作用了。但是,我试图实现的是,当我使用给定ID的remove方法时,我想设置isDeleted(这是我所有数据库中的(位)列表)的值设置为false。目前,我迷失在互联网上的文档和共享代码中。
谢谢
我可能会通过使可软删除的实体实现一个接口来处理此问题,例如ISoftDeletable。
public interface ISoftDeletable
{
bool IsDeleted { get; set; }
}
然后,将上面的代码扩展为检查实体类型是否实现了ISoftDeletable接口,如果它只是将IsDeleted设置为true。
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的实体的查询会过滤掉那些被软删除的实体。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句