[英]Map two separate objects in new class with AutoMapper
我有 2 个模型, Products
和Categories
,这些来自存储库上的 model:
IEnumerable<Product>
IEnumerable<Category>
我创建了一个 WebAPI 并引入了 AutoMapper,最终具有如下代码,以在它们自己的单独类中返回产品和类别
public class ProductsController : ApiController
{
....
public IHttpActionResult Get()
{
try
{
IEnumerable<Product> products = GetProducts();
var mappedResult = _mapper.Map<IEnumerable<ProductModel>>(products);
return Ok(mappedResult);
}
catch (Exception ex)
{
return InternalServerError(ex);
}
}
正如我在类别的新 class 中所说的相同代码。 请注意此 class 的新 model,因此它与域 model ( ProductModel
) 是分开的。
我现在想在我的 MVC 应用程序(不是.Net Core)中创建一个页面,该页面需要在下拉列表中显示类别列表并使用 foreach 循环列出产品。 我创建一个新的 class 如下
Public Class ProductsAndCategoriesModel
{
public ProductModel Products { get; set; }
public CategoryModel Categories { get; set; }
}
这里的想法是有一种新方法来加载相同的产品和类别数据,但在它自己的 class 中。 我遵循与上述相同的约定,但我如何使用 AutoMapper map 到这个 class 的两个不同数据源?
var mappedResultProducts = _mapper.Map<IEnumerable<ProductsAndCategoriesModel>>(products);
var mappedResultCategories = _mapper.Map<IEnumerable<ProductsAndCategoriesModel>>(cats);
//return Ok(mappedResult);
我需要将 map 产品添加到 ProductsAndCategoriesModel 中的 ProductsAndCategoriesModel 和 ProductsAndCategoriesModel 中的 Categories。 我试图传递类别但不能,因为它引发了编译器异常。 我怎么能做到这一点?
编辑 1
public ProductCategoryProfile()
{
CreateMap<Product, ProductsAndCategoriesModel>();
CreateMap<Category, ProductsAndCategoriesModel>();
}
无需使事情变得比应有的复杂。 你为什么不简单地这样做:
Model class:
public Class ProductsAndCategoriesModel
{
public IEnumerable<ProductModel> Products { get; set; }
public IEnumerable<CategoryModel> Categories { get; set; }
}
映射配置文件:
public ProductCategoryProfile()
{
CreateMap<Product, ProductModel>();
CreateMap<Category, CategoryModel>();
}
Controller:
public IHttpActionResult Get()
{
try
{
IEnumerable<Product> products = GetProducts();
IEnumerable<Category> categories = GetCategories();
var result = new ProductsAndCategoriesModel
{
Products = _mapper.Map<IEnumerable<ProductModel>>(products),
Categories = _mapper.Map<IEnumerable<CategoryModel>>(categories)
}
return Ok(result);
}
catch (Exception ex)
{
return InternalServerError(ex);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.