我将项目分为(截至目前)4个层:
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
,这是我的问题。
我是否应该急于在存储库层加载?
就像在Student和StudentDto中一样,Automapper应该将对象图正确映射到dto。仅当启用了延迟加载时,此功能才有效,否则您可能需要使用快速加载。
我认为选择使用哪种方法的最佳方法是测试这两种方法的性能,这将取决于几个因素,例如db中的数据模型以及sql服务器与应用程序之间的延迟等。
编辑..如何选择最佳方法
如何选择最佳方法您需要考虑三件事,
您将与数据库建立多少个连接。如果您使用的是延迟加载,如果引用的导航属性不在上下文中,则将对导航属性的所有参考点进行数据库调用。
要从数据库中检索多少数据如果选择在初始查询中以不同的装载方式加载所有数据,那么当您要检索的数据量很大时,它将太慢。
查询的复杂性。当您使用延迟加载时,查询将很简单,因为所有数据均未在初始查询中加载。如果使用立即加载,则查询路径将使查询更加复杂
在这里阅读更多
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句