C# DDD和Automapper能否克服延迟加载?

C# DDD和Automapper能否克服延迟加载?,c#,entity-framework,entity-framework-4,automapper,C#,Entity Framework,Entity Framework 4,Automapper,我正在从事一个n层域驱动设计项目,该项目使用Entity Framework 4 DB First和Automapper在域的命名空间中生成POCO 澄清一下:EF项目返回MyProject.Repositories.EF.entities命名空间中的实体,我使用Automapper将它们转换为MyProject.Domain.entities命名空间中的实体 现在,我不太清楚当我在EF和域实体之间映射时,是否枚举了所有集合属性,也就是说,在映射时是否也从数据库中检索了所有相关数据,或者当我在代

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

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

现在,我不太清楚当我在EF和域实体之间映射时,是否枚举了所有集合属性,也就是说,在映射时是否也从数据库中检索了所有相关数据,或者当我在代码中实际枚举它们时,它们是否仍然只是延迟加载的


我关心的是明显的性能影响。

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

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


因此,请使用AutoMapper,但要注意抓取,就像没有使用AutoMapper时应该做的那样。

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

为什么不先编码?您可以避免一些问题..客户端首先明确要求DB。您是指使用Project.to吗?不是。问题是automapper是否枚举IQueryable集合属性。我认为这是错误的。我目前遇到这个问题,DAL实体上的导航属性是通过从ICollection映射到ICollection加载的。@victor ICollection必须实现(它有一个计数)。迭代期间只能生成IEnumerable。