有没有办法询问EF中的上下文它的跟踪集有多大?

本文关键字:跟踪 上下文 EF 有没有 | 更新日期: 2023-09-27 18:02:07

我遇到了EF中一个相当典型的问题。当我继续访问我的上下文时,它在检测变化时跟踪和枚举的项目数量增加了。最终,一切都慢下来了。下面是我目前为解决这个问题所做的:

public class ContextGenerator
{
    private IContext _context;
    private string _connString;
    private int accessCount;
    public ContextGenerator(string conn)
    {
        _connString = conn;
    }
    public IContext Instance
    {
        get
        {
            if (accessCount > 100)
            {
                Dispose();
            }
            if (_context == null)
            {
                var conn = EntityConfigurationContext.EntityConnection(_connString);
                _context = new MyDbContext(conn);
                accessCount = 0;
            }
            ++accessCount;
            return _context;
        }
    }
    public void Dispose()
    {
        _context.Dispose();
        _context = null;
    }
}

这主要是为了防止我的上下文变得太笨拙,因为它每100次访问就会处理和创建一个新的上下文,但它看起来非常笨拙和混乱。此外,100是随机选择的,不能保证有人不会只使用一次访问就插入一百万个内容。有没有一种方法可以代替问上下文本身,如果它变得"太大"?

或者如果有人有更好的方法来解决这个问题,我愿意接受建议。

有没有办法询问EF中的上下文它的跟踪集有多大?

每个上下文应该是一个单独的工作单元,因此我强烈建议您每个操作有一个上下文(除非您确实必须)。

有关EF当前跟踪的更多信息,请查看Context.ChangeTracker