在mvc视图模型中自动映射到POCOs
本文关键字:映射 POCOs mvc 视图 模型 | 更新日期: 2023-09-27 18:17:16
我使用EF Code First并定义了一些poco。另一方面,为每一个定义了一些ViewModel类。到这里为止,有两个项目;模型和MVC。此外,还有另一个项目包含了UnitOfWork和Repository Pattern(一个通用的存储库类)。
在UnitOfWork中编写了许多字段和属性。下面是一个例子:
public GenericRepository<ActionProvider> ActionProviderRepository
{
get
{
if (this.actionProviderRepository == null)
{
this.actionProviderRepository = new GenericRepository<ActionProvider>(context);
}
return actionProviderRepository;
}
}
该属性的类型是在Model项目中定义的ActionProvider类的类型。
但是我的问题;我需要将每个ViewModel映射到POCO类。在网上冲浪之后,我来应用AutoMapper。下面是我在UserController类中所做的:
public class UserController : Controller
{
private UnitOfWork unitOfWork = new UnitOfWork();
private User _UserModel = new User();
private VM_User _VM_User = new VM_User();
//
// GET: /User/
public ViewResult Index()
{
_VM_User = Mapper.Map<MAHAL_E_MA_Model.POCO.User, VM_User>(_UserModel);
return View(unitOfWork.UserRepository.Get(orderBy: us => us.OrderByDescending(u => u.ID)).OfType<User>().ToList());
}
}
错误是:
缺少类型映射配置或不支持映射。
我已经尝试过通过这些链接和其他一些,但没有为我工作!这一个
这个
您需要在某处创建地图
Mapper.CreateMap<MAHAL_E_MA_Model.POCO.User, VM_User>();
我在Application_Start
中有一个Mapping.Setup()
方法,可以创建所需的所有地图。
我最终通过以下代码行克服了这个问题,并希望分享它,也许对其他人有用:
public ViewResult Index()
{
var query = unitOfWork.UserRepository.Get(orderBy: us => us.OrderByDescending(u => u.ID)).OfType<User>().ToList();
Mapper.CreateMap<User, VM_User>();
IList<VM_User> vm_Users = Mapper.Map<IList<User>, IList<VM_User>>(query);
return View(vm_Users);
}