1

我正在开发一个 n 层域驱动设计项目,该项目使用 Entity Framework 4 DB-First 和 Automapper 在域的命名空间中生成 POCO。

澄清一下:EF 项目返回MyProject.Repositories.EF.Entities命名空间中的实体,我使用 Automapper 将它们转换为MyProject.Domain.Entities命名空间中的实体。

现在,我不太清楚当我在 EF 和 Domain 实体之间进行映射时,是否枚举了所有集合属性,即在映射时是否还从数据库中检索了所有相关数据,或者它们是否仍然存在仅当我在代码中实际枚举它们时才延迟加载。

我担心明显的性能影响。

4

2 回答 2

2

结果答案是否定的。只要您在两个 IEnumerable 之间进行映射,实际的枚举只会在您执行 foreach、ToList() 等操作时发生。如果您不对这些对象的 IEnumerable 属性执行操作,则永远不会发生枚举并且相关的将不会检索数据。

于 2014-05-01T09:24:32.217 回答
0

长话短说——这不是 AutoMapper 关心的问题,而是你如何使用 ORM 的问题。AutoMapper 只是删除了您已经编写的代码,因此如果您针对您的 ORM 编写了性能不佳的代码,AutoMapper 将很乐意提供帮助。

人们在使用 AutoMapper 之前、使用 AutoMapper 以及使用 AutoMapper 之后都在滥用 ORM。正确使用延迟加载是一个强大的工具,但仍然可能被滥用。使用延迟加载并不妨碍开发人员了解幕后实际发生的事情。

所以使用 AutoMapper,但要小心你的获取,就像你应该做的那样,如果你不使用 AutoMapper。

于 2013-09-20T22:06:20.280 回答