我正在尝试将我的项目重构为不同的层。我目前在我的MVC控制器中进行了所有业务逻辑和数据访问,这在将来很难维护。
我也在使用Microsoft Identity,并试图通过将我的上下文作为参数传递来实现存储库和工作单元模式:
public UnitOfWork(ApplicationDbContext context)
{
_db = context;
}
public void Complete()
{
_db.SaveChanges();
}
public CustomerRepository CustomerRepository => _customerRepository ?? customerRepository = new CustomerRepository(_db));
//dispose methods
我的存储库:
public class CustomerRepository
{
private readonly ApplicationDbContext _db;
public CustomerRepository(ApplicationDbContext context)
{
_db = context;
}
public Customer GetCustomer(string id)
{
return _db.Customers
.Include(c => c.User)
.SingleOrDefault(c => c.ApplicationUserId == id);
}
}
我希望我的MVC控制器通过业务逻辑层访问我的存储库。我可以通过我的存储库访问实体,但是如何更新实体或对它们执行业务逻辑?
我试图实现这样的逻辑层:
public class CustomerLogic
{
private readonly UnitOfWork unitOfWork;
public CustomerLogic(ApplicationDbContext context)
{
unitOfWork = new UnitOfWork(context);
}
public Customer GetCustomer(string id)
{
return unitOfWork.CustomerRepository.GetCustomer(id);
}
public void UpdateCustomer(Customer customer)
{
unitOfWork.CustomerRepository.UpdateCustomer(customer);
unitOfWork.Complete();
}
}
我无法更新我的客户实体,我认为这是因为像参数一样传递我的dbcontext但我没有看到其他解决方案。我的架构方法是错误的还是过于先进,无法将ef核心应用程序中的问题与非专家的微软身份分开?