C# 在使用EF检索和创建对象后,是否应该将其保存在内存中?
我正在使用EF从数据库中获取和创建一些对象。我需要在两个不同的迭代中使用这些对象。在第一次迭代中,我从数据库中获取它们。在第二步中,我需要再次使用对象C# 在使用EF检索和创建对象后,是否应该将其保存在内存中?,c#,entity-framework,C#,Entity Framework,我正在使用EF从数据库中获取和创建一些对象。我需要在两个不同的迭代中使用这些对象。在第一次迭代中,我从数据库中获取它们。在第二步中,我需要再次使用对象 如果我将对象保存在内存中的列表中,而不是再次从数据库中检索它们,那么第二次迭代会更快吗?或者EF会将它们保存在内存中,因为它们最近被使用过吗?您应该像这样加载内存中的对象,以便使用Local属性访问它们: context.YourTable.Load(); 然后您应该使用Local属性来迭代任意次数 foreach(var obj in co
如果我将对象保存在内存中的列表中,而不是再次从数据库中检索它们,那么第二次迭代会更快吗?或者EF会将它们保存在内存中,因为它们最近被使用过吗?您应该像这样加载内存中的对象,以便使用
Local
属性访问它们:
context.YourTable.Load();
然后您应该使用Local
属性来迭代任意次数
foreach(var obj in context.YourTable.Local) {
////
}
您还可以使用
ToList()
,这样您的项目将被加载到内存中如果您不久之后需要它们,为什么不干脆将它们保存在内存中呢?您只存储对对象的引用,这些对象很轻 除非禁用跟踪,否则EF将在DbContext对象的生存期内将查询的对象保留在内存中
如果您不想更新对象,我建议您将它们保存到内存中,而不将它们保存到DBcontext中,因为这样可以提高性能。您可以通过向查询中添加.AsNoTracking()来实现这一点
如果要将对象持久化超过上下文的生命周期,可以通过将它们缓存在内存中来实现。然后,您可以稍后将它们重新附加到preform更新中当然,从内存中检索要快得多。顺便说一句,如果您想从内存中获取对象,您不必将其存储在列表中,只需使用EF功能之一。尝试使用缓存方法,尤其是对于不需要经常更改的对象。最好提供一个示例,但不清楚第一次迭代和第二次迭代之间的区别。将对象保存在列表中是什么意思?是的,我也看不出问题所在。答案似乎很明显。但你可能会要求EF为你提供所有不同的可能性?