0

EntityFramework の結果セットを永久に制限する方法を知っている人はいますか? このConditional Mappingのようなものについて話しています。これはまさに私が達成したいことですが、1 つの例外があります。これをプログラムで実行したいのです。これは、コンテキストの作成時にのみ条件値が EF に渡されるためです。また、この列がマッピングから消えないようにしたくありません。

私はEF2.0とリフレクションでこれを達成する方法を知っています。CreateQuery()メソッドを使用して独自のObjectQuery. CreateQuery()追加の条件を使用して独自の ESQL クエリを挿入できますWHERE TABLE.ClientID == value

EF40の問題点は、これ以上ないということObjectQueryだけObjectSetで、CreateQuery()使用されていません。独自の ESQL クエリを挿入する方法がわかりません。

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

私のアプローチは完全に悪いのかもしれませんが、他に方法がありません。

4

1 に答える 1

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);
    }
  }
}
于 2010-11-23T14:59:22.453 に答える