AutoMapper 3.1.1和Entity Framework 6.1代理对象

时间:2014-03-28 21:00:32

标签: c# entity-framework automapper

我意识到这已经被问到了,但我读过的解决方案到目前为止似乎没什么影响。我使用的是Entity Framework 6.1和AutoMapper 3.1.1。采用以下对象:CompanyCompanyListItem;我试试这个:

Mapper.Configure<Company, CompanyListItem>();

好吧,当我尝试进行实际的映射时,它会崩溃并烧毁,但没有定义映射。我知道这是由于Entity Framework创建的代理对象造成的。我到目前为止看到的一个解决方案是调用Map方法的重载版本:

IQueryable<Company> companies = CompaniesService.FindCompanies();

Mapper.Map(companies, typeof(Company[]), typeof(CompanyListItem[]));

它仍然没有奏效并对我大喊大叫。

我还读过其他帖子,这些帖子自2.2.1开始修复了吗?这是不同的还是它倒退了?我很感激建议。

1 个答案:

答案 0 :(得分:7)

您使用的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>()方法,因为它将执行映射服务器端而不是客户端,因此您可能需要通过网络发送更少的数据。