实体框架中的数据访问控制



我想在实体框架中创建一个简单(或不简单)的数据访问控制。我看到它在 EF 中并不容易得到支持,因为 EF 实际上没有对架构和视图的良好支持。

我想对实体的某些列进行条件访问。

在 Sql Server 中,使用架构很容易实现。例如,我可以在他的架构中为用户创建一个视图,其中缺少某些列。其他用户(例如管理员)将在其架构中拥有所有列。它们都可以具有相同的视图名称,例如:getUsers,但只有从dbo schema(dbo.getUsers)执行它的管理员才会拥有所有列,而其他列只有一些列。当然,在 Sql Server 中,它也可以通过存储过程来实现。

如何在 EF 中实现数据访问的功能?

我想创建一个函数,我将能够像这样使用:

-- function checks user role and returns appropirate columns/entity  
var result = getAppropirateDataForThisUser("getUsers", user);

当然这只是为了说明问题。用法可能完全不同。

您可以做的一件事是创建一个包装器漫游车 DbContext,其中包含过滤相关用户的列的逻辑,

public class EfWrapper:Context
{
 private DbContext _dbContext;
public EfWrapper(DbContext context){
    _dbContext=context;
  }
  public IEnumerable <User> getUsers(User user){
         //if ... write your logic to choose correct projection 
          var users=  from user in context.Users
          select new UserWithLessColumns
               {
                    id= user.Id,
                    Name= user.Name
               });   
        return users;
 }
}

条件过滤的目的是什么? 如果用于显示,请在上层应用层中进行处理。 如果您实际上谈论的是不同的业务对象(即,一个用户获取一种类型的对象,另一个用户获取该对象的子类型),则可以为这些类创建不同的类和映射,并使用代码优先 EF 技术

EF 是一个数据

访问组件,具体来说是一个对象关系映射器,即,它将数据库数据映射到业务对象,对吗?

相关内容

  • 没有找到相关文章

最新更新