代码之家  ›  专栏  ›  技术社区  ›  Captain Kenpachi

DDD和Automapper能打败懒惰加载吗?

  •  1
  • Captain Kenpachi  · 技术社区  · 11 年前

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

    澄清:外汇基金项目在 我的项目.存款.EF.实体 命名空间,我使用Automapper将它们转换为 我的项目.域.实体 命名空间。

    现在,我无法确定当我在EF和Domain实体之间映射时,是否枚举了所有集合财产,也就是说,当映射时,所有相关数据也都从数据库中检索到了,或者,当我在代码中实际枚举它们时,它们仍然只是延迟加载。

    我对明显的性能影响感到担忧。

    2 回复  |  直到 11 年前
        1
  •  2
  •   Captain Kenpachi    10 年前

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

        2
  •  0
  •   Jimmy Bogard    11 年前

    长话短说-这不是AutoMapper的问题,而是你如何使用ORM的问题。AutoMapper只会删除你已经编写的代码,所以如果你在ORM中编写了性能糟糕的代码,AutoMapper会很乐意。

    在使用AutoMapper之前,在使用AutoMapper时,以及在使用AutoMap之后,人们都在滥用ORM。如果使用得当,延迟加载是一个强大的工具,但仍然可能被滥用。使用延迟加载并不妨碍开发人员理解封面下面实际发生的事情。

    所以,使用AutoMapper,但要注意抓取,就像你没有使用AutoMaper时应该做的那样。