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

时间:2016-08-11 21:03:18

标签: c# entity-framework entity-framework-6

我遇到了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是任意选择的,并且不能保证有人不会插入一百万件只有一次访问的东西。有没有办法反过来询问上下文本身是否已经变得太大"?

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

1 个答案:

答案 0 :(得分:0)

每个上下文应该是一个单独的工作单元,因此我强烈建议您每个操作有1个上下文(除非您非常需要)。

有关EF目前正在跟踪结帐的详情Context.ChangeTracker