1

Entity Frameworkで単純な(またはそうでない)データアクセス制御を作成したいと思います。EFは実際にはスキーマとビューを適切にサポートしていないため、EFではそれほど簡単にはサポートされないことがわかりました。

エンティティのいくつかの列に条件付きアクセスを行いたい。

SQL Serverでは、スキーマを使用して簡単に実現できます。たとえば、一部の列が欠落しているスキーマでユーザーのビューを作成できます。他のユーザー(たとえばadmin)は、自分のスキーマにすべての列を持ちます。どちらもビューの名前を同じにすることができます(例: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

条件付きフィルタリングの目的は何ですか? 表示用の場合は、上位のアプリ レイヤーで処理します。実際に異なるビジネス オブジェクトについて話している場合 (つまり、あるユーザーが 1 つのタイプのオブジェクトを取得し、別のユーザーがそのオブジェクトのサブタイプを取得する)、異なるクラスを作成し、それらのクラスをマップして、コード ファーストを使用できます。 EFテクニック

EF はデータ アクセス コンポーネント、具体的にはオブジェクト リレーショナル マッパーです。つまり、データベース データをビジネス オブジェクトにマップしますよね。

于 2012-04-20T19:27:26.037 に答える
0

できることの 1 つは、関連するユーザーの列をフィルター処理するロジックを使用して、ラッパー ローバー 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;
 }
}
于 2012-04-20T16:37:42.603 に答える