我使用的是实体框架,在我的上下文中,我做过一些像:
public override int SaveChanges()
{
foreach (var entry in ChangeTracker.Entries())
{
if (entry.Entity is Base entity)
{
if (entry.State == EntityState.Added)
{
entity.Created = DateTime.UtcNow;
entity.Modified = DateTime.UtcNow;
}
else if (entry.State == EntityState.Modified)
{
entity.Modified = DateTime.UtcNow;
}
}
}
return base.SaveChanges();
}
Base的基础是:
public int Id { get; set; }
public DateTime? Created { get; set; }
public DateTime? Modified { get; set; }
public bool IsDeleted { get; set; }
现在我要做的是当我使用我的上下文加载属性时:
_context.MyEntities.AsEnumerable(something);
我希望它选择IsDeleted
属性设置为false的所有实体。是否可以在DbContext
中执行此操作,例如我通过覆盖SaveChanges()
我可以看到有一种方法可以覆盖,但不知道如何去做:
public override DbSet<TEntity> Set<TEntity>()
{
return base.Set<TEntity>();
}
答案 0 :(得分:2)
如果我理解正确,您需要在DbContext
public DbSet<MyEntity> ExistingMyEntities {
get { return MyEntities.Where(x => !x.IsDeleted); }
}
那么您可以根据需要使用上下文对象来检索未删除的实体。
<强>更新强>
您也可以通过IsDeleted过滤模型构建器(如果使用了软删除How can I automatically filter out soft deleted entities with Entity Framework?)
public class MyContext : DbContext
{
public virtual IDbSet<MyEntity> MyEntities { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MyEntities>()
.Map(m => m.Requires("IsDeleted")).HasValue(false).Ignore(m => m.IsDeleted);
}
}
我被Ignore误导了,但正如Jan Muncinsky注意到可以使用HasValue
方法进行过滤。