ObjectContext
は、生成されたエンティティへの汎用アクセスを可能にします。 DbContext
にはこのようなサポートはありません。ジェネリックリポジトリを使用してEF5にアクセスすることは困難です。それをTEntity呼び出す、のは、私は一般的なメカニズムは、任意のエンティティを読みたいとしましょう:DbContextへの汎用アクセス
public class DataRepositoryEF5<T> where T: DbContext
{
private ObjectContext _context;
public DataRepositoryEF5(DbContext context)
{
_context = ((IObjectContextAdapter)context).ObjectContext;
}
public IEnumerable<TEntity> ReadAll<TEntity>() where TEntity : class,new()
{
return GetObjectSet<TEntity>().AsEnumerable();
}
protected ObjectSet<TEntity> GetObjectSet<TEntity>() where TEntity : class,new()
{
ObjectSet<TEntity> result;
result = _context.CreateObjectSet<TEntity>();
return result;
}
}
使用
var context = new MyContext();
var repository = new DataRepositoryEF5<MyContext>(context);
IEnumerable<Document> results = repository.GetAll<Document>();
foreach (var item in results)
{
Console.WriteLine("{0} {1} {2} {3}", item.Description, item.Id, item.Property, item.Whatever);
}
EFは、共通の基本型EntityObject
を持つクラスを生成するために使用されます。それはもはやケースですので、私はObjectSet
へDbSet
からキャストを余儀なくされていますObjectContext.CreateObjectSet<>()
の同等の機能がないため、私が持つことができる最高の制約は、class
...
セカンドではありません。
このパターンでは、DbContext
は必要ありません。ジェネリックスがなければ、私はすべてのCRUD操作を手渡すように強制されます。私は何か見落としてますか?そうでない場合、代わりにObjectContext
でコードを生成するようにEF5に指示できますか?
を使用することですしているが、私はしばらく前にCodeProjectの上 HTTPを掲載このヒントを見て: //www.codeproject.com/Tips/309753/Repository-Pattern-with-Entity-Framework-4-1-and-C –
@MassimilianoPeluso - はい、その記事は私が必要とするものです!あなたのサンプルのcontext.Set <>()はそれを行う新しい方法です。私はエンティティについても 'class'制約があることを知っています。コメントを回答として投稿したいのであれば、私は回答クレジットを与えます。 - –