6

STE için daha iyi bir uygulama ne olabilirdi, DbContext'in bir Repo'yu EF ile gerçekleştirmenin en basit yolu olduğunu duydum, kişisel olarak EntityState'den faydalanıyorum, ama orada ObjectContext'teki herhangi bir üye, Repo'yu kullanarak CRUD operasyonlarım için daha fazla işlevsellik sunabilir mi?ObjectContext vs DbContext kullanarak bir Havuz Uygulaması arasındaki fark EF 4.1

public class GenericRepository<TEntity> where TEntity : class 
    { 
     internal DbContext context; 
     internal DbSet<TEntity> dbSet; 

     public GenericRepository(DbContext context) 
     { 
      this.context = context; 
      this.dbSet = context.Set<TEntity>(); 
     } 

     public virtual IEnumerable<TEntity> Get(
      Expression<Func<TEntity, bool>> filter = null, 
      Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, 
      string includeProperties = "") 
     { 
      IQueryable<TEntity> query = dbSet; 

      if (filter != null) 
      { 
       query = query.Where(filter); 
      } 

      foreach (var includeProperty in includeProperties.Split 
       (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)) 
      { 
       query = query.Include(includeProperty); 
      } 

      if (orderBy != null) 
      { 
       return orderBy(query).ToList(); 
      } 
      else 
      { 
       return query.ToList(); 
      } 
     } 

     public virtual TEntity GetByID(object id) 
     { 
      return dbSet.Find(id); 
     } 

     public virtual void Insert(TEntity entity) 
     { 
      dbSet.Add(entity); 
     } 

     public virtual void Delete(object id) 
     { 
      TEntity entityToDelete = dbSet.Find(id); 
      Delete(entityToDelete); 
     } 

     public virtual void Delete(TEntity entityToDelete) 
     { 
      if (context.Entry(entityToDelete).State == EntityState.Detached) 
      { 
       dbSet.Attach(entityToDelete); 
      } 
      dbSet.Remove(entityToDelete); 
     } 

     public virtual void Update(TEntity entityToUpdate) 
     { 
      dbSet.Attach(entityToUpdate); 
      context.Entry(entityToUpdate).State = EntityState.Modified; 
     } 

     public virtual IEnumerable<TEntity> GetWithRawSql(string query, params object[] parameters) 
     { 
      return dbSet.SqlQuery(query, parameters).ToList(); 
     } 
    } 

Ben de Unity kullanıyorum belirtmeyi unutmuşum, bu nedenle havuzu için çağrılar bu şekilde gibidir: bugün ben böyle bir GenericRepository kullanıyorum

[Dependency] 
     public IUnityContainer Container { get; set; } 

     public List<Case> GetAll() 
     { 
      using (var context = Container.Resolve<ClaimEntities>()) 
      { 
       var qry = (from c in context.Cases 
          select c).ToList(); 
       return qry; 
      } 
     } 

cevap

4

Öz izleme varlıklar ObjectContext'in özelliğidir - bunlar not supported in DbContext'dur. STE'leri istiyorsanız, ObjectContext API'sine geçiş yapmanız ve mevcut POCO'larınız yerine varlıkları oluşturmak için STEs T4 şablonunu kullanmanız gerekir.

İlgili konular