我正在开发一个n-Tier领域驱动设计项目,它使用Entity Framework 4 DB-First和Automapper在Domain的命名空间中生成POCO。
澄清:EF项目返回 MyProject.Repositories.EF.Entities 命名空间中的实体,我使用Automapper将它们转换为 MyProject.Domain.Entities 命名空间。
现在,我无法弄清楚当我在EF和Domain实体之间进行映射时,是否枚举了所有集合属性,即是否在映射时也从数据库中检索了所有相关数据,或者当我在代码中实际枚举它们时,它们仍然只是延迟加载。
我担心明显的性能影响。
答案 0 :(得分:2)
原来答案是否定的。只要在两个IEnumebles之间进行映射,实际的枚举只会在执行foreach,ToList()等时发生。如果你不对这些对象的IEnumerable属性执行操作,枚举将永远不会发生,不会检索相关数据。
答案 1 :(得分:1)
长话短说 - 这不是AutoMapper的问题,而是你如何使用你的ORM。 AutoMapper只是删除了您已经编写过的代码,因此如果您要针对ORM编写糟糕的执行代码,AutoMapper将非常乐意为您服务。
人们在AutoMapper之前滥用ORM,使用AutoMapper,以及使用AutoMapper之后。如果使用正确,延迟加载是一个强大的工具,但仍然可以被滥用。使用延迟加载并不妨碍开发人员理解幕后实际发生的事情。
所以使用AutoMapper,但要注意你的提取,就像你没有使用过AutoMapper一样。