Tôi đang cố triển khai mẫu lưu trữ chung. Tôi tìm thấy trang web này mà tôi nghĩ rằng nó cũng giải thích. http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangleMẫu Kho lưu trữ Chung với Mẫu UnitOfWork
Mục đích của tôi là lưu các nhà phát triển một thời gian và tổ hợp phím và tôi biết điều này sẽ giúp tôi.
Vì vậy, tôi có 2 câu hỏi:
1. Đây có phải là cách tiếp cận tốt hay không, tôi có gặp phải một số vấn đề trong tương lai không?
2. Làm thế nào tôi có thể kết hợp nó với mô hình Unitofwork ?, Tôi không thể tạo một thể hiện của lớp trừu tượng tất nhiên, vì vậy mã sau không hợp lệ.
public class UnitOfWork : IDisposable
{
#region Private fields
private readonly MyCompanyContext _context = new MyCompanyContext();
private GenericRepository<MyCompanyContext, Task> _taskRepository;
public GenericRepository<MyCompanyContext, Task> TaskRepository
{
get
{
return _taskRepository ??
(_taskRepository = new GenericRepository<MyCompanyContext, Task>());
}
}
namespace MyCompany.DAL.Repository
{
public interface IGenericRepository<T> where T : class
{
IQueryable<T> GetAll();
IQueryable<T> FindBy(Expression<Func<T, bool>> predicate);
void Add(T entity);
void Delete(T entity);
void Edit(T entity);
void Save();
}
public abstract class GenericRepository<C, T> :
IGenericRepository<T>
where T : class
where C : DbContext, new()
{
private C _entities = new C();
public C Context
{
get { return _entities; }
set { _entities = value; }
}
public virtual IQueryable<T> GetAll()
{
IQueryable<T> query = _entities.Set<T>();
return query;
}
public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
IQueryable<T> query = _entities.Set<T>().Where(predicate);
return query;
}
public virtual void Add(T entity)
{
_entities.Set<T>().Add(entity);
}
public virtual void Delete(T entity)
{
_entities.Set<T>().Remove(entity);
}
public virtual void Edit(T entity)
{
_entities.Entry(entity).State = System.Data.EntityState.Modified;
}
public virtual void Save()
{
_entities.SaveChanges();
}
}
}
Tôi không nghĩ rằng tôi đang thêm một lớp trừu tượng khác, tôi chỉ đơn giản là viết mã của tôi để làm cho nó dễ sử dụng hơn. với mô hình kho lưu trữ chung tôi có thể làm CRUD theo cách rất hiệu quả. Nhưng đó là lý do tại sao tôi hỏi câu hỏi đầu tiên của tôi ở nơi đầu tiên, Tôi có vấn đề kỹ thuật với phương pháp này –
Có, bạn nói đúng, với UOW bạn không thực sự thêm một lớp trừu tượng khác. Tôi nghĩ rằng mặc dù ngoại trừ trong các tình huống rất đơn giản UOW không phải là rất hữu ích, và có, tôi nghĩ rằng bạn có thể có vấn đề kỹ thuật nếu bạn phải quản lý bất kỳ mối quan hệ nhiều-nhiều. –
@LuisEValencia> hm, tôi không thấy cách đơn giản hóa mã của bạn? – Giedrius