4

这肯定是一个特殊的问题,在发现没有人有同样的问题之后,我希望我能找到真正知道问题所在的人。

我有,说:

public class ViewModel
{
     public string TestString { get; set; }
     public ChildObject Child { get; set; }
     public List<Children> Children { get; set; }
}

现在,当我在控制器中映射我的对象时......即

TestObject testObject = Repository.GetObject() // This is my Entity Framework object (with dynamic proxies attached to it)
Mapper.Map(ViewModel, testObject);

而且,我的映射定义为:

Mapper.CreateMap<ViewModel, TestObjectType>();
Mapper.CreateMap<ViewModelChildView, TestObjectChildType>();

一切都很好,所以我的 ViewModel 设置正确,我的表单。问题呢?这是有趣的部分。

ChildObject就像我的原始对象一样,是一个 DynamicProxy(实体框架)。但是List<Children>,设置为普通列表(即使原始列表是 的 DynamicProxy List<Children>)。

反过来,这意味着实体框架无法访问此列表,因为它没有正确绑定到上下文。我整天都在努力寻找没有运气的解决方法。有什么想法吗?

编辑

这些是我的实际对象绑定:

 Mapper.CreateMap<CompanyViewModel, Company>();
 Mapper.CreateMap<CompanyCategoryViewModel, CompanyCategory>(); // I've ever tried removing this line.
 Mapper.CreateMap<List<CompanyCategoryViewModel>, List<CompanyCategory>>();

控制器:

Mapper.Map(companyViewModel, company);

公司对象 = 动态代理 CompanyCategories 列表子对象(公司的)、地图,但仍然不是动态代理。

4

2 回答 2

2

您既需要Child对象类型的映射,也需要集合的映射。如果你有一个List<>你需要List<>在你的CreateMap(它不会与IEnumerable

Mapper.CreateMap<ViewModel, TestObjectType>();
Mapper.CreateMap<ViewModelChildView, TestObjectChildType>();
Mapper.CreateMap<List<ViewModelChildView>>, List<TestObjectChildType>>();

这是一个包含我的复制代码的GIST 。

为了完成图片,我使用了 AutoMapper 的最新预实现版本2.2.1-ci9004.

于 2013-02-18T09:11:11.503 回答
1

所以基本上我认为唯一的区别是你如何创建地图。

也许在旁边

   Mapper.CreateMap<ViewModelChildView, TestObjectChildType>();

您还应该创建一个列表映射,例如

   Mapper.CreateMap<IEnumerable<ViewModelChildView>, IEnumerable<TestObjectChildType>>();
于 2013-02-13T14:07:12.263 回答