实体框架内存管理和处置?

时间:2016-05-20 22:55:38

标签: entity-framework

我使用EF(EF Core,实际上,在OSX上使用ASP.NET Core,但我相信这更像是一般的"新手式" EF问题,所以请继续阅读...)

我构建了一个使用EF将日志条目发布到我的数据库的小日志例程。从存储库类调用的类似的东西:

numlist

WebLog log = new WebLog(source, path, message); Context.WebLogs.Add(log); Context.SaveChanges(); 是一个简单的模型类,WebLogContext.WebLogs集合,DbSet<WebLog>显然是Context。我相信这很简单。

但我的问题是:如果我继续向DbContext集合中添加新的日志条目,而我从不做重启我的服务器,那么该集合是否会无限制地增长?是否有某种&#34;清除&#34;或&#34;冲洗&#34;我可以定期管理内存使用情况(不影响数据库中提交的行,当然 - 我希望这些行保持不变)。或Context.WebLogs是某种特殊的收藏品,不会做到这一点吗?

1 个答案:

答案 0 :(得分:0)

如上面的DevilSuichiro所述,推荐的方法是限制DbContext实例的生命周期。例如。在Web应用程序中,您通常每个请求都使用DbContext个实例,因此添加的无限数量的实体不会成为问题。

最接近&#34; flush&#34;操作是SaveChanges()该方法不会尝试删除对被跟踪实体的引用,因为DbContext旨在在SaveChanges()之后重用。

在EF的早期版本中,我们有Detach() API,您可以使用它来删除单个跟踪参考,但我们在DbContext或EF Core中的任何位置都没有该API

顺便说一下,如果DbContext不是线程安全的,那么在多个请求之间共享DbContext的实例是非常有问题的。