gpt4 book ai didi

c# - 没有实现 UoW 或存储库的 EF 是否正确?

转载 作者:太空宇宙 更新时间:2023-11-03 12:31:55 26 4
gpt4 key购买 nike

<分区>

我看过许多使用 EF 实现存储库模式和 UoW 的教程,但我认为没有必要,因为 DbSet 和 DbContext 已经是。所以我决定在不实现的情况下简化它,但添加诸如此类的服务。

 public class HomeController : Controller
{
private IdbContext _dbContextUoW;
private IClientService _clientService;
public HomeController (IDbContext dbContextUoW,IClientService clientService){//IoC
this._dbContextUoW = dbContextUoW;
this._clientService = clientService;
}

public ActionResult Index()
{
List<Client> clients;
clients = List<Client>this._clientService(this._dbContextUoW).GetAll();
//this._dbContextUoW.SaveChanges()

return View();
}



}

public interface IClientService
{
List<Client> GetAll();
}
public class ClientService: IClientService
{
private IdbContextUoW _dbContextUoW;
public ClientService(IDbContext dbContextUoW){
this._dbContextUoW = dbContextUoW;
}
public List<Client> GetAll(){
return ...
}
}

这个实现是否正确?我在正确的轨道上吗?

编辑:我最终决定执行以下操作,我不知道这是否是一个好的解决方案,但对我来说似乎是的,为每个服务创建一个通用存储库。我的服务将有基本的 CRUD 操作(存储库)+ 逻辑操作(服务)

 public abstract class GenericRepository<T> : IGenericRepository<T>
where T : EntityBase
{
protected IContext _entities;
protected readonly IDbSet<T> _dbset;

public GenericRepository(IContext context)
{
_entities = context;
_dbset = context.Set<T>();
}

public virtual IEnumerable<T> GetAll()
{
...
}

public IEnumerable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
...
}

public virtual T Add(T entity)
{
...
}

public virtual T Delete(T entity)
{
...
}

public virtual void Edit(T entity)
{
...
}

public virtual void Save()
{
...
}
}
public class ClienteService : GenericRepository<Cliente>
{
IContext _context;
public ClienteService(IContext context)
:base(context)
{
_context = context;
}

public Cliente GetById(int Id)
{
return _dbset.FirstOrDefault(x => x.Id == Id);
}
}

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