我使用EF(EF Core,实际上,在OSX上使用ASP.NET Core,但我相信这更像是一般的"新手式" EF问题,所以请继续阅读...)
我构建了一个使用EF将日志条目发布到我的数据库的小日志例程。从存储库类调用的类似的东西:
numlist
WebLog log = new WebLog(source, path, message);
Context.WebLogs.Add(log);
Context.SaveChanges();
是一个简单的模型类,WebLog
是Context.WebLogs
集合,DbSet<WebLog>
显然是Context
。我相信这很简单。
但我的问题是:如果我继续向DbContext
集合中添加新的日志条目,而我从不做重启我的服务器,那么该集合是否会无限制地增长?是否有某种&#34;清除&#34;或&#34;冲洗&#34;我可以定期管理内存使用情况(不影响数据库中提交的行,当然 - 我希望这些行保持不变)。或Context.WebLogs
是某种特殊的收藏品,不会做到这一点吗?
答案 0 :(得分:0)
如上面的DevilSuichiro所述,推荐的方法是限制DbContext
实例的生命周期。例如。在Web应用程序中,您通常每个请求都使用DbContext
个实例,因此添加的无限数量的实体不会成为问题。
最接近&#34; flush&#34;操作是SaveChanges()
该方法不会尝试删除对被跟踪实体的引用,因为DbContext旨在在SaveChanges()
之后重用。
在EF的早期版本中,我们有Detach()
API,您可以使用它来删除单个跟踪参考,但我们在DbContext
或EF Core中的任何位置都没有该API
顺便说一下,如果DbContext
不是线程安全的,那么在多个请求之间共享DbContext
的实例是非常有问题的。