相关疑难解决方法(0)

如何使用Entity Framework自动过滤掉软删除的实体?

我正在使用Entity Framework Code First.我重写SaveChangesDbContext,让我做一个"软删除":

if (item.State == EntityState.Deleted && typeof(ISoftDelete).IsAssignableFrom(type))
{
    item.State = EntityState.Modified;
    item.Entity.GetType().GetMethod("Delete")
        .Invoke(item.Entity, null);

    continue;
}
Run Code Online (Sandbox Code Playgroud)

这很好,所以对象知道如何将自己标记为软删除(在这种情况下它只是设置IsDeletedtrue).

我的问题是我怎样才能使它在检索对象时忽略任何对象IsDeleted?所以,如果我说_db.Users.FirstOrDefault(UserId == id)如果该用户拥有IsDeleted == true它将忽略它.基本上我想过滤?

注意:我不想只是把&& IsDeleted == true 那就是为什么我用界面标记类,所以删除知道如何"正常工作",我想以某种方式修改检索,知道如何"正常工作"也基于那个界面存在.

.net c# entity-framework ef-code-first

34
推荐指数
4
解决办法
2万
查看次数

实体框架代码优先 IQueryable 导航属性

我在互联网上看到的大多数示例都将导航属性显示为任一ICollection或直接List实现。它们通常是virtual, 以启用延迟加载。

但是,当您访问此类属性时,它将在内存中加载整个集合,并且如果您在它之后有一个子查询(即object.MyListProperty.Where(...)),我注意到将为MyListProperty.

我如何避免这种情况?where如果可能,我希望list 属性之后的子句在 SQL 服务器上执行。我可以使用IQueryable导航属性吗?这种情况有什么最佳实践吗?

c# entity-framework iqueryable ef-code-first

6
推荐指数
1
解决办法
1581
查看次数

标签 统计

c# ×2

ef-code-first ×2

entity-framework ×2

.net ×1

iqueryable ×1