首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用Entitiy减少对数据库的调用

如何使用Entitiy减少对数据库的调用
EN

Stack Overflow用户
提问于 2020-11-16 15:03:12
回答 1查看 28关注 0票数 0

我使用10+ (取决于用例)调用数据库,只是为了填充我视图中的下拉列表。

如下所示的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ViewBag.FK_Grupe_Predmeta_ID = new SelectList(db.Get_Grupe_Predmeta(userLanguageID).ToList(), "ID", "Naziv");
ViewBag.FK_Klasifikacione_Oznake_ID = new SelectList(db.Get_Klasifikacione_Oznake(userLanguageID).ToList(), "ID", "Naziv");
ViewBag.FK_Stranke_ID = new SelectList(db.Strankes.Where(s => s.Povjerljiv == true), "ID", "Naziv");
ViewBag.FK_Prioriteti_ID = new SelectList(db.Get_Prioriteti(userLanguageID).ToList(), "ID", "Naziv");
ViewBag.odjeljenja = new SelectList(db.Get_Odjeljenja(userLanguageID).OrderBy(x => x.Naziv).ToList(), "ID", "Naziv");
ViewBag.VrstePostupka = new SelectList(db.Vrsta_Postupkas.ToList(), "PK_Vrsta_Postupka_ID", "Naziv_Vrste_Postupka");

我调用存储过程和表。但是当我在同一时间测试多个用户时,我得到了很长的加载时间,有时在几分钟内。

找不到任何方法来进行更少的调用并同时填充ViewBag。有谁知道在这种情况下最好的方法是什么?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-16 21:11:11

一种建议是只发送所需字段的投影,而不是将整个实体集传递给SelectList构造函数。除非绝对必要,否则我可能会避免调用存储过程,并让EF与表进行交互以构建最佳查询。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var strankes = db.Stranks
    .Where(x => x.Povjerljiv)
    .Select(x => new { x.ID, x.Naziv });
ViewBag.FK_Stranke_ID = new SelectList(stranks, "ID", "Naziv");

对于常见的查找,您可以投影到ID和名称(Naziv)的视图模型,然后考虑将这些内容缓存到会话中,以避免每次页面加载时重新加载它们。您的SelectList是从缓存的视图模型构建的,而不是再次访问DB。

确保您的DbContext生存期范围设置不长于每个请求。存活时间更长并且随着时间的推移跟踪更多实体的DbContexts在检索和更新实体时会变得慢得多。它跟踪的越多,当你请求某些东西时,它就会筛选更多的缓存实体,然后转到DB读取更多的实体,然后将这些结果实体与它的本地缓存进行缝合。(用于填充任何相关实体等)为了在快速加载集时获得最大性能,请考虑在查找实体(仅映射FK列)和通过局部范围的有界DbContext读取之间具有最少导航属性的有界上下文。

其他需要注意的性能陷阱是实体可能被序列化并发送到视图的任何地方。具有要查找的导航属性的实体被序列化程序“触及”,最终可能会触发延迟加载,以便一次加载一个相关实体。我的建议是始终将实体投影到ViewModels以发送到视图,以避免像这样的陷阱。由于延迟加载陷阱可能会生成查询,因此它们看起来很像触发查找查询的情况。SQL Profiler对于发现在页面加载时意外生成大量查询的情况非常有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64860403

复制
相关文章
在 Laravel 控制器中进行表单请求字段验证
在 Web 应用中,用户提交的数据往往是不可预测的,因此一个非常常见的需求是对用户提交的表单请求进行验证,以确保用户输入的是我们所期望的数据格式。很多 Web 框架都对此功能专门提供了工具集,Laravel 也不例外,而且这个工具集异常丰富,基本上涵盖了目前主流的所有验证规则,即使是一些非常个性化的验证,也可以基于 Laravel 验证类的扩展功能来自定义验证规则,非常强大。接下来,我们就一起来看看如何在 Laravel 中对表单请求进行验证。
学院君
2021/01/08
5.9K0
Laravel中如何添加新字段,如何指定在某个字段后而不是添加在最后
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/112554.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/08
1.1K0
Laravel中如何添加新字段,如何指定在某个字段后而不是添加在最后
通过 Laravel 表单请求类实现字段验证和错误提示
在上一篇教程中,我们已经演示了如何在控制器方法中对表单请求字段进行验证,并且提到如果请求字段很多很复杂,都写到控制器方法里面会导致控制器臃肿,从单一职责原则来说需要将表单请求验证拆分出去,然后通过类型提示的方式注入到控制器方法。今天,我们就来实现这个拆分,Laravel 提供了表单请求类的功能帮助我们快速完成这一架构调整。
学院君
2021/01/08
3.9K0
Oracle创建表、删除表、修改表(添加字段、修改字段、删除字段)语句总结
关于Oracle创建表、删除表、修改表(添加字段、修改字段、删除字段)语句的简短总结。
星哥玩云
2022/08/18
3.8K0
Mysql 添加字段或者创建表SQL语句「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/07
5.5K0
Mysql 添加字段或者创建表SQL语句「建议收藏」
nop 添加字段
一.Libraries 1.core 层------------实体字段 2.data-Map----------映射到数据库 二.Admin  1.Models  --------admin界面模型      提示信息写法  2.Validators------界面模型验证  注:withMessage 不在所需要范围时提示 三.Web  1.Models  --------web界面模型     提示信息写法 2.Validators  ---------界面模型验证类
wfaceboss
2019/04/08
1.4K0
hive添加字段
修改字段位置时一定要加cascade,否则会报错 ALTER TABLE t_coupon_info ADD COLUMNS (ca2 STRING COMMENT ‘生成’ ) cascade ; ALTER TABLE t_coupon_info change ca2 ca2 STRING AFTER trans_num cascade ;
全栈程序员站长
2021/05/19
2.1K0
laravel 中字段格式处理
这里举一个简单的示例,在laravel 中,我们应当这样做: 在对应的Order 模型里定义
句小芒
2022/12/29
5080
Laravel 5.4: 特殊字段太长报错 420000 字段太长
laravel 5.4 改变了默认的数据库字符集,现在utf8mb4包括存储emojis支持。如果你运行MySQL v5.7.7或者更高版本,则不需要做任何事情。
全栈程序员站长
2021/11/01
9130
[laravel] laravel验证请求参数
laravel 验证请求参数,有自带的规则,如果有特殊的规则,可以自己写正则验证逻辑
唯一Chat
2021/09/23
4K1
[laravel] laravel验证请求参数
jmeter创建JDBC请求,返回多个字段传递给登录接口
今天给大家分享的是,【使用jmeter创建JDBC请求,返回多个字段传递给登录接口】。
程序媛淼淼
2022/07/01
6630
jmeter创建JDBC请求,返回多个字段传递给登录接口
遗传算法——以背包问题为例
A Genetic Algorithm (GA) is a type of optimization algorithm that is inspired by the process of natural selection and genetics. GAs are used to find approximate solutions to optimization and search problems, especially in cases where the search space is vast and complex. They are particularly useful when you have a large solution space and don't know the mathematical form of the objective function you're trying to optimize.
曼亚灿
2023/09/21
4360
遗传算法——以背包问题为例
Laravel 实现关系模型取出需要的字段
/要。一个机构对应多个授权码,授权码里面的信息很杂乱,但是我取出关联模型的时候想把他们过滤掉。
用户8664418
2021/07/13
1.4K0
Http请求头中各字段的含义
浏览器(或者其他基于HTTP的客户端程序)可以接收的内容类型(Content-types),例如 Accept: text/plain
玖柒的小窝
2021/09/14
1.2K0
点击加载更多

相似问题

Laravel背包:坐标字段

11

创建并更新其他型号的背包laravel字段

14

存储前背包V4修改字段

10

Laravel背包基本请求验证

17

Laravel背包创建用户

116
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文