2

可能重复:
DbContext 可以强制执行过滤策略吗?

看看这段代码,这是我的实体之一:

class User
{
    ...
    ...
    ...
    public bool IsDeleted { get ; set; }

}

当我想删除用户时,我将 IsDeleted 属性设置为 true 并更新它。这是我的 DbContext :

class DataContext : DbContext
{
    ...
    ...
    ...
    public DbSet<User> Users { get; set; }

}

现在问题来了:

当我只使用 new DataContext().Users 时,如何更改我的 DbContext 以返回未删除的对象

抱歉我的语法不好。我是英语新手。更多详情评论我

UPDATE1:我将 DBContext 更改为此代码,但出现错误

public DbSet<DT.DTO.User> Users
{
    get
    {
        return this.Set<User>().Where(rec => !rec.IsDeleted)
    }
    set;
 }

错误:无法将类型“System.Linq.IQueryable”隐式转换为“System.Data.Entity.DbSet”。存在显式转换(您是否缺少演员表?)

4

1 回答 1

0

我建议使用某种服务类或存储库作为 DataContext 之上的层。在这里的另一个线程中解释了类似的东西:https ://stackoverflow.com/a/5680618/40853

该服务应该处理数据过滤或分页之类的东西 - 实现在很大程度上取决于您想要实现的目标。

这种实现的一个目标可能是将对数据库访问层(在您的情况下为 EF)的依赖减少到专门为数据库访问编写的代码之外的最低限度。

像下面这样的东西可以抽象出你如何处理数据库中的数据。

public class DatabaseService : IDatabaseService
{
    public IEnumerable<User>  GetUsers(someconditions)
    {
        // someconditions can be any kind of condition to include in the query
        using (var db = new DataContext())
        {
            return db.Users.Where(rec => !rec.IsDeleted
            && someconditions).ToList();
        }
    }

    [...] implement stuff like DeleteUser(guid), UpdateUser(User user))

}
于 2012-07-16T11:39:01.807 回答