我正在使用EF 6创建一个Web API asp.net 5,没有任何存储库,UOW,Facade在EF之上。 我确实希望在服务层中应用业务规则,保持应用业务逻辑的异步(至少是每个API方法的返回) 并在Product to ProductVO之间进行一些转换
产品服务
public async Task<ProductVO> getProductVO(int id)
{
using (_context = new OnlineShopContext())
{
EntityMapper mapper = new EntityMapper();
Product product = await GetAsync(id);
Task<Supplier> supplier = _context.Suppliers.SingleOrDefaultAsync(s => s.ID == product.Supplier.ID);
Task<Category> category = _context.Categories.SingleOrDefaultAsync(c => c.ID == product.Category.ID);
return await mapper.map(product, await supplier, await category);
}
}
产品服务需要等待产品寻找供应商和类别。 (这是一个非常简单的案例,但考虑调用SP,或者存在锁定 在供应商或类别上,处理例外?)
实体映射器
public Task<ProductVO> map(Product product, Supplier supplier, Category category)
{
ProductVO productVo = new ProductVO(id: product.ID, productName: product.Name, supplierId: supplier.ID,
supplierName: supplier.Name, categoryId: category.ID, categoryName: category.Name,
thumbImageName: product.ThumbImageName, imageName: product.ImageName, price: product.Price
);
return new Task<ProductVo>productVo;
}
考虑更复杂的评估产品列表的情况,直到匹配业务规则而不等待db的整个列表开始 匹配特定要求。类似于带有OrderByCompletion选项的AsyncEx库。
谢谢