泛型访问DbContextObjectContext允许泛型访问生成的实体。DbContext似乎没有这样的支持。使用通用存储库访问EF5具有挑战性。假设我想要一个通用机制来读取任何给定的实体,称之为TEntity:publicclassDataRepositoryEF5whereT:DbContext{privateObjectContext_context;publicDataRepositoryEF5(DbContextcontext){_context=((IObjectContextAdapter)context).对象上下文;}publicIEnumerableReadAll()whereTEntity:class,new(){returnGetObjectSet().AsEnumerable();}protectedObjectSetGetObjectSet()whereTEntity:class,new(){ObjectSet结果;结果=_context.CreateObjectSet();返回结果;}}用法varcontext=newMyContext();varrepository=newDataRepositoryEF5(context);IEnumerable结果=repository.GetAll();foreach(variteminresults){Console.WriteLine("{0}{1}{2}{3}",item.Description,item.Id,item.Property,item.Whatever);EF用于生成具有通用基类型的EntityObject。由于不再是这种情况,我可以拥有的最佳约束是......其次,我被迫从DbSet转到ObjectSet,因为没有等效的ObjectContext.CreateObjectSet()。使用此模式,我不需要DbContext。没有泛型,我不得不手动编写所有CRUD操作。我错过了什么?如果不是,是否可以告诉EF5使用ObjectContext生成代码?看看我刚刚发布的这个提示无论如何,诀窍是使用上下文。请多加注意—publicinterfaceIEntity{intId{get;放;}}publicclassRepository:IRepositorywhereTEntity:class,IEntity{privateIDbContext_context;公共存储库(IDbContext上下文){_context=上下文;}privateIDbSetDbSet{get{return_context.Set();}}publicIQueryableGetAll(){returnDbSet.AsQueryable();}publicvoidDelete(TEntityentity){DbSet.Remove(entity);}.....本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
