假设我有一个模型,
因此,如果我正在填充一个仅显示条目日期和标题的表格,是否有一种方法可以使用实体框架仅从数据库检索这些列,并且效率更高呢?
根据这里的说法:
另一个问题是,根据这个答案,使用
Article
,它有大量的列,数据库中包含超过100,000行。如果我执行 var articles = db.Articles.ToList()
这样的操作,它会为每篇文章从数据库中检索整个文章模型,并将其保存在内存中,对吗?因此,如果我正在填充一个仅显示条目日期和标题的表格,是否有一种方法可以使用实体框架仅从数据库检索这些列,并且效率更高呢?
根据这里的说法:
看起来我应该使用跟踪返回对象需要成本。检测对象更改并确保多个请求返回同一逻辑实体的相同对象实例需要将对象附加到ObjectContext实例。如果不计划对对象进行更新或删除,并且不需要标识管理,则在执行查询时考虑使用NoTracking合并选项。
NoTracking
,因为数据没有被更改或删除,只是展示而已。因此,我的查询现在变成了 var articles = db.Articles.AsNoTracking().ToList()
。还有其他可以使这更有效率的事情要做吗?另一个问题是,根据这个答案,使用
.Contains(...)
在处理大型数据库时会导致性能下降。那么,在大型数据库中搜索条目的推荐方法是什么?
Contains
不慢是因为数据库表很大。Contains
会问:“给我那些具有 PropertyXValue = 1 或 PropertyXValue = 5 或 PropertyXValue = 7 等等的实体。” 如果你要求的“OR 值”的集合很大,那么Contains
就会变慢。即使对于一个小表或空表,它也会变慢。 - Slauma