gpt4 book ai didi

c# - 具有 UnitOfWork 模式的通用存储库模式

转载 作者:太空狗 更新时间:2023-10-29 23:01:20 25 4
gpt4 key购买 nike

我正在尝试实现一个通用的存储库模式。我找到了这个网站,我认为它解释得很好。 http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangle

我的目的是为开发人员节省一些时间和击键次数,我知道这会对我有所帮助。

所以我有两个问题:
1. 这个方法好不好,以后会不会出问题?
2.如何结合Unitofwork模式?当然不能创建抽象类的实例,所以下面的代码无效。

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

最佳答案

关于存储库有多种观点,但在我自己尝试了几年生产中的各种存储库实现之后,我同意Ayende's。意见,那个存储库,尤其是通用的,是冗余的抽象层。

我非常喜欢这门类(class): http://www.pluralsight-training.net/microsoft/Courses/TableOfContents/linq-architecture

它遍历了大多数可能的解决方案并解释了优缺点。

我们现在使用的是对数据上下文的非常精简的抽象,只是为了克服 Linq2Sql 的可测试性问题,这些问题在大多数情况下与使用 EF 无关。

关于c# - 具有 UnitOfWork 模式的通用存储库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11306847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com