我一直在尝试对整个EF /存储库/工作单元架构进行自我教育-进展缓慢。
无论如何,我设法创建了一些使用接口的存储库和一个工作单元。 (花了我一个小时,使其在没有接口的情况下可以完美地与接口一起使用)。
对这个问题。在这里包装工作单元有什么意义吗?
private readonly IUnitOfWork _unitOfWork;
public ActionResult Index()
{
var all = _unitOfWork.CampaignRepository.All().ToList();
return View(all);
}
要么
public ActionResult Index()
{
using (var uow = _unitOfWork)
{
all = uow.CampaignRepository.All().ToList();
return View(all);
}
}
还-在控制器中实例化
public CampaignController(MarketingContext context)
{
_unitOfWork = new UnitOfWork(context);
}
这是否意味着它在控制器中始终可用?或仅在专门调用工作单元时?
抱歉,天真,但我一直在阅读许多不同的方式来做每一件事!
最佳答案
首先,由于您正在使用实体框架,因此不需要实现UnitOfWork模式,因为EF默认情况下支持UOF。(EF的SaveChanges支持UOF)
现在,如果您想实现UnitOfWork,请不要使用ToList()来获取存储库中的所有实体,因为每次调用控制器时都不需要对数据进行操作(这是一个性能问题),这样更好UnotOfWork和Repository模式的实现请看this文章。
关于c# - 您应该包装工作单元吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22020660/