私は、エンティティフレームワークのための一般的なリポジトリを書き込み、これらの呼び出しの間に差があるものにと混乱していています:.CreateObjectSet <T>、.Set <T>、および.CreateQuery <T>の違いは?
ObjectContext.CreateObjectSet<T>
ObjectContext.CreateQuery<T>
DbContext.Set<T>
私は両方とも最初の.edmxファイルから生成されたコンテキストだけでなく、コードをサポートしている一般的なリポジトリをしたいですDbContext、私はこれ持っている:私はすべての3が使用さ見てきたオンライン見てきた例では
public abstract class EntityRepository<TClass>
where TClass : class, new()
{
//private readonly TContext _context;
private readonly ObjectSet<TClass> _objectSet;
protected EntityRepository(IObjectContextAdapter context)
{
_objectSet = context.ObjectContext.CreateObjectSet<TClass>();
}
protected EntityRepository(ObjectContext context)
{
_objectSet = context.CreateObjectSet<TClass>();
}
public ObjectSet<TClass> Query()
{
return _objectSet;
}
}
を、それらの間の実際の違いは何ですか?パフォーマンスが向上していますか? 3つの方法すべてを使ってコンテキストに対してLINQクエリを書くことができます。
これらのそれぞれに対してデータベースに対してクエリを実行すると、実際にはパフォーマンスの違いはありませんか?私のケースでは、私のリポジトリが実際のコンテキストを格納していないので、私はObjectSetを選択する正しい道を進んだと言いますので、すべてのCRUD操作を行うことができますか? – SventoryMang
基本的には、ObjectSet:ObjectQuery です。いずれかを使用してクエリを構築するかどうかは、クエリの実行に影響しません。 CreateQuery(私たちはいくつかのメタデータルックアップを行う)と比較してCreateObjectSetへの呼び出しに最小限のオーバーヘッドがありますが、このオーバーヘッドが現実世界に目に見える影響があれば驚くでしょう。 Set のDbContext APIへの実装は、実際には他のメソッドよりも薄いレイヤーです。重大な影響はありません。また、DbContext全体がAPIを使用する方がはるかに簡単で簡単です。 –
divega