2012-03-13 35 views
5

Hace un tiempo creé repositorios y servicios usando linq a sql y me costó entenderlo. Finalmente lo entendí pero ahora trato de hacer lo mismo pero usando Code First EF. Estoy confundido sobre cómo funciona esto con el código primero. Si tengo un repositorio que puedo pasar en un objeto de clase y tengo select(), ect ... ¿Cómo interactúa esto o cómo lo conecto a/a DbContext? Si alguien puede señalarme en la dirección correcta o darme algún consejo, será apreciado. No hay mucho en esto en Google ya que todavía es un patrón relativamente nuevo.Creando repositorio usando el código de Entity Framework First 4.3

¿Cómo usar/¿utilizaría DbSet? Estos repositorios son geniales pero confusos.

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

Se puede declarar un campo privado como 'context' DataContext privado en los repositorios de implementar' 'IRepository . –

Respuesta

6

Aquí es una Tutorial de repositorio y UnitOfWork en EF de ASP.Net. Espero que esto ayude. (UnitOfWork es asegurar que los múltiples repositores comparten el mismo DataContext)

repositorio genérico:

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: Llamar al método Save() para actualizar todos los cambios en los repositorios.

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(); 
    } 
    .... 
} 

controlador:

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()); 
    } 

    .... 
} 
Cuestiones relacionadas