c# - AutoMapper 3.1.1 和 Entity Framework 6.1 代理对象

标签 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 开始已经修复了吗?这是不同的还是倒退了?我将不胜感激。

最佳答案

您没有正确使用 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/

相关文章:

c# - 从 Entity Framework 5 升级到 Entity Framework 6(在解决方案中混合和匹配)

c# - 使用 ValueInjecter 扁平化对象,包括可空类型

c# - 如何忽略所有标记为虚拟的属性

c# - Windows 服务的可执行文件的路径

c# - 使用构造函数依赖注入(inject)检索文件的简单工厂

javascript - 如何在动态链接函数jquery函数C#上传递多个参数?

c# - 微服务架构 CQRS

entity-framework - 我应该如何首先使用 EF 代码模拟用户之间的友谊?

c# - .net core 中是否有 context.Database.Log

c# - ForAllMembers 覆盖忽略已定义的规则