2012-03-13 14 views
5

Un po 'di tempo fa ho creato repository e servizi utilizzando linq to sql e ho faticato a capirlo. Finalmente l'ho capito ma ora sto provando a fare la stessa cosa ma usando Code First EF. Sono confuso su come questo funzioni prima con il codice. Se ho un repository che posso semplicemente passare in un oggetto di classe e avere select(), ect ... Come interagisce o come posso collegarlo a/a DbContext? Se qualcuno può indicarmi la giusta direzione o darmi qualche consiglio, sarebbe apprezzato. Non molto su questa roba su google dato che è ancora un modello relativamente nuovo.Creazione di un repository utilizzando il codice Entity Framework Prima 4.3

Come utilizzare/dovrei utilizzare DbSet? Questi repository sono fantastici ma confusi.

public class IRepository<T> : IDisposable 
     where T : class, new() 
{ 
    IQueryable<T> Select(); 

    IQueryable<T> SelectWith(params Expression<Func<T, object>>[] includeProperties); 

    T GetById(int id); 

    T GetByIdWith(int id, params Expression<Func<T, object>>[] includeProperties); 

    void InsertOnCommit(T model); 

    void DeleteOnCommit(T model); 

} 


public class DataContext : DbContext 
{ 
} 
+0

è possibile dichiarare un campo privato come 'context' DataContext privata nei repository implementare' IRepository '. –

risposta

6

Ecco una Tutorial di repository e UnitOfWork in EF da ASP.Net. Spero che questo aiuto. (UnitOfWork è quello di assicurarsi che i multipli repositores condividono lo stesso DataContext)

Repository Generico:

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

     public GenericRepository(SchoolDBContext 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 = "") 
     { 
     ... 
     } 

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

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

     ... 
    } 

UnitOfWork: Chiamare il metodo Save() per aggiornare tutte le modifiche nel repository.

public class UnitOfWork : IDisposable 
{ 
    private SchoolDBContext context = new SchoolDBContext(); 
    private GenericRepository<Department> departmentRepository; 

    public GenericRepository<Department> DepartmentRepository 
    { 
     get 
     { 

      if (this.departmentRepository == null) 
      { 
       this.departmentRepository = new GenericRepository<Department>(context); 
      } 
      return departmentRepository; 
     } 
    } 

    public void Save() 
    { 
     context.SaveChanges(); 
    } 
    .... 
} 

controller:

public class CourseController : Controller 
{ 
    private UnitOfWork unitOfWork = new UnitOfWork(); 

    // 
    // GET: /Course/ 

    public ViewResult Index() 
    { 
     var courses = unitOfWork.CourseRepository.Get(includeProperties: "Department"); 
     return View(courses.ToList()); 
    } 

    .... 
} 
Problemi correlati