1

我想在实体框架中做一个简单的(或不做)数据访问控制。我看到它在 EF 中并不那么容易支持,因为 EF 实际上并没有很好地支持模式和视图。

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

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

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

我想做一个可以像这样使用的函数:

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

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

4

2 回答 2

0

One thing you can do is to create a wrapper rover DbContext with the logic to filter the columns for relevant user,

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;
 }
}
于 2012-04-20T16:37:42.603 回答
0

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

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

于 2012-04-20T19:27:26.037 回答