単純な(またはそうでない)データアクセスコントロールをEntity Frameworkで作成したいと考えています。 EFは実際にはスキーマやビューを適切にサポートしていないため、EFでそれほど簡単にサポートされていないことがわかりました。エンティティフレームワークのデータアクセス制御
エンティティの一部の列に条件付きでアクセスしたいです。
Sql Serverでは、スキーマを使用して簡単に達成できます。たとえば、いくつかの列が欠落しているスキーマでユーザーのビューを作成できます。他のユーザー(adminなど)は、スキーマ内のすべての列を持ちます。どちらもビューの同じ名前を持つことができます。たとえば、getUsersですが、dboスキーマ(dbo.getUsers)からadminを実行するのはadminだけで、すべての列とそれ以外のものがあります。もちろん、SQL Serverではストアドプロシージャによっても実現できます。
EFでデータアクセスの機能をどのように達成できますか?
私はこのように使用することができます機能を作りたい:もちろん
-- function checks user role and returns appropirate columns/entity
var result = getAppropirateDataForThisUser("getUsers", user);
それが唯一の問題を説明することです。使用方法はまったく異なる場合があります。条件付きのフィルタリングの目的は何
私は多くのエンティティ/ビュー/プロシージャを持っている場合、それを使って作業するのは非常に難しいかもしれません。単純な解決策はありませんか?オブジェクトごとにメソッドを実装することは悪い考えです。私はむしろストアドプロシージャまたはビューでDBサイトの列をフィルタリングするだろう... – nosbor
その場合..はい。私はあなたがデータベース側でそれを必要と思う。 –
[OK]を、しかし私はEFでそれを処理できますか?私はdb.ExecuteStoreQueryでそれをやろうとしました(@ "execute" + schema + "。" + procName);しかし、私が少ない列を受け取ったスキーマからプロシージャを実行すると、このキャストを実行するのに十分な列がないという例外がスローされます。 –
nosbor