0

我正在使用实体框架 4.0。我对数据库做了很多读取操作(数据分析)。不会保存任何数据。目前,尽管有延迟加载,但对数据库服务器的 I/O 操作数量会大大降低应用程序的速度。我决定将大部分小表加载到内存中(.ToList()),然后生成计算。有没有办法自动读取表中数据的上下文只是对它的第一次引用并且没有被生命上下文更新?这个想法是,进一步引用这个表并没有查询数据库,只有应用程序的内存。

现在,我使用以下代码:

public class cDBReader
{
        private List<RISK_T_MEMBERS> fMembers;

        public List<RISK_T_MEMBERS> Members
        {
            get
            {
                if (fMembers == null)
                    using (RiskEntities context = new RiskEntities(TConfiguration.connectionString))
                    {
                        context.RISK_T_MEMBERS.MergeOption = System.Data.Objects.MergeOption.NoTracking;
                        fMembers = context.RISK_T_MEMBERS.ToList();
                    }

                return fMembers;
            }
            set { fMembers = value; }
        }
}
4

2 回答 2

0

您能否添加更多信息?当前的实施有什么问题?

似乎您需要的是某种缓存。这是关于缓存的示例实现。

一个更简单(在我看来不太矫枉过正)的方式来实现缓存是这样的。

最后但并非最不重要的是您的任何实现(例如您已经制作的那个)。也许单例模式可以在这里帮助你?这是一个单例对象,它全局保存您需要的所有数据,并通过提供当前活动的上下文来实现对数据的获取,如果数据为空,应用程序将使用活动上下文来获取它们。一段时间后删除和创建上下文也可以加快应用程序的速度(这就是我认为您应该为 getData 函数提供活动上下文的原因)。

于 2013-03-19T13:11:18.177 回答
0

您可以先尝试急切加载而不是延迟加载,以完全控制 EF 加载的内容,然后手动预加载您需要的内容。加载的数据将在一个上下文生命周期内保持活动状态,如果您需要更多并确保数据库是只读的,您可以存储在某处,然后在创建新上下文时附加预加载的数据

于 2013-03-19T14:11:24.253 回答