我意识到这个问题已经被问过了,但我读过的解决方案到目前为止似乎没有什么不同。我正在使用 Entity Framework 6.1 和 AutoMapper 3.1.1。获取以下对象:Company
和 CompanyListItem
;我试试这个:
Mapper.Configure<Company, CompanyListItem>();
好吧,当我尝试进行实际映射时,它崩溃并烧毁了,但没有定义映射。我知道这是由 Entity Framework 创建的代理对象引起的。到目前为止,我看到的一种解决方案是调用 Map 方法的重载版本:
IQueryable<Company> companies = CompaniesService.FindCompanies();
Mapper.Map(companies, typeof(Company[]), typeof(CompanyListItem[]));
它仍然不起作用,并且对我大喊大叫。
我还阅读了其他帖子,说这个问题从 2.2.1 开始已经修复了吗?这是不同的还是倒退了?我将不胜感激。
最佳答案
您没有正确使用 Automapper,您需要使用 QueryableExtensions命名空间,所以你的代码应该是
IQueryable<Company> companies = CompaniesService.FindCompanies();
CompanyListItem[] results = companies.Project().To<CompanyListItem>().ToArray();
此外,如果您打算以其他方式进行操作,您仍然有 Mapper.Map
错了,应该是
IQueryable<Company> companies = CompaniesService.FindCompanies();
CompanyListItem[] result = Mapper.Map<IEnumerable<Company>,CompanyListItem[]>(companies);
但我仍然建议执行 .Project().To<T>()
方法,因为它将执行映射服务器端而不是客户端,因此您可能需要通过网络发送的数据更少。
关于c# - AutoMapper 3.1.1 和 Entity Framework 6.1 代理对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22723133/