2012-03-13 23 views
5

Một thời gian sau tôi tạo kho và dịch vụ bằng cách sử dụng LINQ to sql và tôi đã cố gắng để hiểu nó. Cuối cùng tôi đã hiểu nó nhưng bây giờ tôi đang cố gắng làm điều tương tự nhưng sử dụng Code First EF. Tôi đang bối rối về cách làm việc này với mã đầu tiên. Nếu tôi có một kho lưu trữ mà tôi có thể chuyển qua một đối tượng lớp và chọn(), ect ... Làm thế nào để tương tác này hoặc làm cách nào để kết nối nó với/a DbContext? Nếu ai đó có thể chỉ cho tôi đúng hướng hoặc cho tôi một số lời khuyên nó sẽ được đánh giá cao. Không nhiều về công cụ này trên google vì nó vẫn là một mẫu tương đối mới.Tạo kho lưu trữ sử dụng mã khuôn khổ thực thể Đầu tiên 4.3

Cách sử dụng/tôi có sử dụng DbSet không? Các kho lưu trữ này rất thú vị nhưng khó hiểu.

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

Bạn có thể khai báo một lĩnh vực tư nhân như 'context' DataContext tư nhân trong các kho thực hiện 'IRepository '. –

Trả lời

6

Đây là một Tutorial của Repository và UnitOfWork trong EF từ ASP.Net. Hy vọng điều này giúp đỡ. (UnitOfWork là để đảm bảo nhiều repositores chia sẻ cùng một DataContext)

Generic Repository:

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: Gọi phương thức Save() để cập nhật tất cả các thay đổi trong kho.

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

khiển:

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

    .... 
} 
Các vấn đề liên quan