所以我的 DbContext 上有以下模型类:
每次我呈现 LoanApplication 对象列表时,我都会执行以下操作:
var context = new MyContext();
var applications = context.LoanApplications.Where(d => d.PropertyThatIWantToFilter = localVariable);
这将返回一个 IQueryable,然后我在控制器方法调用中将其转换为这样的 ViewModel:
var vm = applications.Select(d => new LoanApplicationViewModel(d));
在LoanApplicationViewModel
构造函数内部,我接受实体对象并进行相应的映射。问题是,由于 Solicitors 集合是一个导航属性,每次实例化一个新的视图模型时都会调用数据库。每个应用程序的平均律师数是两个,这意味着如果我呈现一个列出最后 10 个应用程序的表,那么该应用程序大约需要 18-20 次访问数据库。
我认为必须有更好的方法来获取这个集合,所以我改变了我的原始查询以像这样急切地加载集合:
var applications = context.LoanApplications.Include("Solicitors").Where...
尽管这将对数据库的调用次数减少到只有一次,但查询速度要慢得多,大约慢了 50%。
数据库托管在 SQL Azure 上,我们已经实现了瞬态故障处理,但我想减少对数据库的调用数量,而不会降低响应时间性能。
这里的最佳做法是什么?