【问题标题】:AutoMapper in MVC3 ViewModel to POCOsMVC3 ViewModel 中的 AutoMapper 到 POCO
【发布时间】:2013-06-05 14:10:08
【问题描述】:

我正在使用 EF Code First 并定义了许多 POCO。另一方面,为每个定义了一些 ViewModel 类。到这里为止,有两个项目;模型和 MVC。此外,还有另一个项目包含 UnitOfWork 和存储库模式(通用存储库类)。

在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());
    }
}

错误是:

缺少类型映射配置或不支持的映射。

我已尝试通过这些链接和其他一些链接,但对我没有用! This one

And this one

任何帮助将不胜感激..

【问题讨论】:

    标签: c# asp.net-mvc-3 ef-code-first automapper


    【解决方案1】:

    你需要在某处创建地图

    Mapper.CreateMap<MAHAL_E_MA_Model.POCO.User, VM_User>();
    

    我在Application_Start 中有一个Mapping.Setup() 方法,可以创建所有需要的地图。

    【讨论】:

    • 我也查看了您的解决方案,但出现了另一个错误。 System.InvalidOperationException: The model item passed into the dictionary is of type 'System.Collections.Generic.List1[ProjectName.POCO.User]',但是这个字典需要一个类型为'System.Collections.Generic.IEnumerable1[ProjectName.ViewModel.Man.VM_User]'.的模型项,我在视图文件中也有这个代码:@model IEnumerable&lt;MAHAL_E_MA_Proj.ViewModel.Man.VM_User&gt;所以,做你有什么想法吗??
    • 在将User 集合传递给视图之前,您是否调用了ToList
    • 正如上面 UserController 类中提到的(在问题中),是的。实际上,Get 方法是以 .ToList() 结束的。
    • 基本上,正如错误所说,当它想要一个IEnumerable 时,你传递给它一个List。如果它每次都得到一个列表,你可以改变你的看法采取@model List&lt;MAHAL_E_MA_Proj.ViewModel.Man.VM_User&gt;
    • 等等,这行不通,抱歉,它需要MAHAL_E_MA_Proj.ViewModel.Man.VM_User 对象,而您正在传递User 对象。你必须弄清楚你想要在视图中什么并传递正确的东西,但这是一个不同的问题。
    【解决方案2】:

    我终于通过以下代码行解决了这个问题,并希望分享它可能对其他人有用:

    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);
        }
    

    【讨论】:

      猜你喜欢
      • 2013-05-31
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多