2016-09-21 9 views
0

Entityフレームワークで、DbContextの初期化時にエンティティのデータセットをフィルタリングすることは可能ですか?クエリを使用するエンティティフレームワークDbContext

次の問題があります。 ERPシステムのデータベースから生産データを読みたいと思います。私たちのすべての部署は、データを1つのテーブルに保存します。テーブルには、データが属する部門のフィールドがあります。今私はただ一つの特定の部門のためのソフトウェアを開発しています。もちろん、私はDbSet内のすべてのデータを読み込み、その後、私のアプリケーションコードで、この部門の単なるデータセットを照会し、このようなことができます:

 Dim test As New DB.ModelProd() 
     Dim cl As New List(Of DB.Charge) 
     cl = test.Charges.ToList().Where(Function(ch) ch.Company = 3 And ch.ChargeId IsNot Nothing).ToList() 
     'do something with cl 

しかし、これは、私はしたくないただ一つの部門のためのアプリケーションであるため、私が決して使用しない他の人のデータを読んで触れてください。また、エラーが発生しやすいため、このディテールをアプリケーションから隠そうとしています(使用する前にデータをフィルタリングすることを忘れてしまいます)。

これを解決するにはどうすればよいですか?

よろしく、 ロナルド

+0

この詳細をBLまたはDALにラップすることができます。たとえば、DbSetsまたはそれらによって返されたIQueryablesをオーバーライドできます。 – DevilSuichiro

+0

1つは、最初の '.ToList()'を削除する必要があります。しかし、あなたは[EntityFramework.DynamicFilters](https://github.com/jcachat/EntityFramework.DynamicFilters)のようになると思います。 –

答えて

1

「最良の」方法はありません - ここではなく、いくつかのオプションがあります

  • は、すべての呼び出し
  • に部門IDを必要とし、ストアドプロシージャを介してすべてのアクセスを実装クエリーを生成し、部門フィルタを追加するコンテキストの周りにリポジトリを作成する

リポジトリを使用することはpですマルチティアシステムで最も慣れ親しんだ方法を巧みに使っています。ストアドプロシージャを使用すると、プロシージャへのアクセスのみを許可し、コンテキストを直接使用したりデータベースを照会したりすることを防ぐことができるため、プログラミングが難しくなります(Linqを自由に使用することはできません

+0

リポジトリの推奨事項に投票しました。リポジトリパターンの実装は、部門の要件を隠すために必要なものです。 – robaudas

関連する問題