0

EntityFrameworkの結果セットを永久に制限する方法はありますか?私はこのようなことについて話していますConditional Mapping。これはまさに私が1つの例外を除いて達成したいことです:私はプログラムでこれをやりたい条件値はコンテキスト作成時にのみEFに渡されるからです。私はこの列がマッピングから消えないようにしたくありません。ObjectQuery ESQLをオーバーライドして永続的にEF結果セットを制限する

私はEF2.0と反射でこれを達成する方法を知っています。私は自分のObjectQueryを生成するためにCreateQuery()メソッドを使用していました。 CreateQuery()は、自分のESQLクエリに追加条件を挿入することを可能にします。 WHERE TABLE.ClientID == value

EF40の問題は、ObjectQueryがなく、ObjectSetCreateQuery()だけが使用されないということです。自分のESQLクエリをどのように注入するのか分かりません。

結果セットを制限したい理由は、クライアントデータを互いに分離したいからです。この分離はコンテキスト内で自動的に行われる必要があり、プログラマーはそれぞれのクエリに条件.Where(x => x.ClientID == 5)を追加する必要がありません。

多分私のアプローチは完全に悪いですが、私は何も知らないです。

答えて

1

あなたはこれを反映する必要はありません。 ObjectContextから継承したクラスを使用するか、UnitOfWorkとRepositoriesのカスタム実装を作成して、この機能をより良い方法でラップすることができます(上位レイヤーはEFコンテキストを公開しないUnitOfWorkおよびRepositoriesのみにアクセスできます)。オブジェクトコンテキストの

簡単な例:

public class CustomContext : ObjectContext 
{ 
    private ObjectSet<MyObject> _myObjectsSet; 
    private int _clientId; 

    public CustomContext(string connectionString, int clientId) 
    : base(connectionString) 
    { 
    _myObjectSet = CreateObjectSet<MyObject>(); 
    _clientId = clientId; 
    } 

    public IQueryable<MyObject> MyObjectQuery 
    { 
    get 
    { 
     return _myObjectsSet.Where(o => o.ClientId == _clientId); 
    } 
    } 
} 
+0

Thxを、これは正常に見えます。非常に多くのコーディング:)私はそれが自動的に行うことができると思った。スローエンティティセットを反復し、いくつかのクエリを – yntelo

+0

...注入することによって、しかし、このアプローチは私にとっては適切です。私は別の方法があることをうれしく思っています。 – yntelo

+0

私は別の問題に遭遇します。あなたの例を使って私は.Include(...)を使うことができません。インクルードは非常に便利で便利です。だから、追加の条件でObjectQueryを返す方法は? – yntelo

関連する問題