存储库模式和延迟加载+ AutoMapper

杰夫

我将项目分为(截至目前)4个层:

  • 应用程序(ASP.NET MVC项目)
  • 域/模型(仅包含根本没有逻辑的模型)
  • BusinessLogic(目前仅“包装”存储库)
  • DAL(实体框架,但应该可互换)

MVC控制器使用业务逻辑“服务”通过业务逻辑层下的任何内容与数据库进行通信,并且控制器不需要告诉任何人“我想要这个Student,我也想要他的所有Courses”,这意味着应当使用延迟加载。

关键是,如果我只是“调用”并将结果返回给调用控制器动作的任何人,除非我明确访问模型上的属性以触发图的加载,否则我无法真正控制要加载的内容。

我想使用AutoMapper从我的模型映射到Dto(每个模型一个,定义返回的内容)。

说我有一个像这样的模型:

public class Student 
{
    public string Name {get;set;}
    public int Age {get;set;}
    public ICollection<Course> Courses {get;set;}
}

像这样的dto:

public class StudentDto
{
    public string Name {get;set;}
    public ICollection<Course> Courses {get;set;}
}

当AutoMapper进行映射时,似乎没有映射Courses,这是我的问题。

我是否应该急于在存储库层加载?

Jayantha Lal Sirisena

就像在Student和StudentDto中一样,Automapper应该将对象图正确映射到dto。仅当启用了延迟加载时,此功能才有效,否则您可能需要使用快速加载。

我认为选择使用哪种方法的最佳方法是测试这两种方法的性能,这将取决于几个因素,例如db中的数据模型以及sql服务器与应用程序之间的延迟等。
编辑..如何选择最佳方法
如何选择最佳方法您需要考虑三件事,

  1. 您将与数据库建立多少个连接。如果您使用的是延迟加载,如果引用的导航属性不在上下文中,则将对导航属性的所有参考点进行数据库调用。

  2. 要从数据库中检索多少数据如果选择在初始查询中以不同的装载方式加载所有数据,那么当您要检索的数据量很大时,它将太慢。

  3. 查询的复杂性。当您使用延迟加载时,查询将很简单,因为所有数据均未在初始查询中加载。如果使用立即加载,则查询路径将使查询更加复杂

在这里阅读更多

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Automapper和NHibernate:延迟加载

来自分类Dev

Automapper延迟加载。实体框架

来自分类Dev

Automapper延迟加载。实体框架

来自分类Dev

如何使用通用存储库模式实现 AutoMapper

来自分类Dev

DDD,AutoMapper和工厂

来自分类Dev

Automapper和Autofac

来自分类Dev

Automapper 和复杂对象

来自分类Dev

延迟初始化AutoMapper

来自分类Dev

延迟初始化AutoMapper

来自分类Dev

AutoMapper-多个类库

来自分类Dev

AutoMapper 4.2和Ninject 3.2

来自分类Dev

防止AutoMapper投影强制加载相关数据

来自分类Dev

Automapper,实体框架更新数据库

来自分类Dev

Automapper,MapFrom和EF动态代理

来自分类Dev

在AutoMapper和实体框架中进行算术

来自分类Dev

使用NHibernate和Automapper来获取数据

来自分类Dev

带有AutoMapper的通用工作单元和存储库模式引发异常“相同类型的另一个实体已经具有相同的主键值”

来自分类Dev

automapper.extensions.microsoft.dependencyinjection和automapper nuget包之间有什么区别?

来自分类Dev

从 Automapper TypeConverter 内部访问数据库是否合理?

来自分类Dev

AutoMapper-可空和不可空int的不同ProjectUsings

来自分类Dev

让Automapper使用由Autofac和WebApi构造的服务

来自分类Dev

如何使AutoMapper使用接口映射和具体映射

来自分类Dev

AutoMapper 3.1.1和Entity Framework 6.1代理对象

来自分类Dev

使用automapper和ninject使用DBContext查找创建地图

来自分类Dev

AutoMapper:ForMember和ForSourceMember有什么区别?

来自分类Dev

非静态AutoMapper和ASP.NET MVC

来自分类Dev

AutoMapper:域模型和视图模型之间的双向深度映射

来自分类Dev

AutoMapper 3.1.1和Entity Framework 6.1代理对象

来自分类Dev

Automapper 在类和结构 AfterMap 之间不起作用

Related 相关文章

热门标签

归档