我正在更改我的asp.net-mvc网站以使用工作单元模式而不是让我的控制器直接访问数据库上下文,因为我已经读过它会使测试更容易。
我一直关注Microsoft指南,工作单元类包含以下get方法
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query).ToList();
}
else
{
return query.ToList();
}
}
但是我不确定这个方法到底是做什么的,特别是可以作为参数传递的内容。我是c#和asp.net-mvc的新手,如果这是一个愚蠢的问题,请道歉,任何人都可以更清楚地解释这种方法是如何工作的,这会很棒吗? 我正在改变我的ManageController当前我有一个方法直接访问数据库并希望更改此但我不知道如何正确调用工作单元获取方法来访问以查找当前用户及其命令订单表。任何帮助都非常感谢!
public ActionResult ViewBookings()
{
string currentUserId = User.Identity.GetUserId();
ApplicationUser currentUser = db.Users.FirstOrDefault(x => x.Id == currentUserId);
List<Order> bookings = (from b in db.Orders where b.user.Id == currentUser.Id select (b)).ToList();
ViewBag.Bookings = bookings;
return View();
}
答案 0 :(得分:1)
Entity Framework已经内置了UoW。这就是SaveChanges和SaveChangesAsync方法的用途。对于UoW模式,没有必要添加任何内容。
您粘贴的代码只是具有条件应用过滤器的查询。工作单元与CRUD的创建,更新和删除部分有关。
如果您想要将前端与数据访问分开,那么您正在寻找CQRS,命令/查询责任分离。使用UI消耗的某种服务总线可以很好地实现这一点,以获取和修改后端上的数据,而与所使用的实际存储无关。