查询EF Core DbSet.Local慢

时间:2018-12-21 14:49:26

标签: performance entity-framework-core

多年来,我一直在EF 6 DbSet.Local上取得巨大成功。但是,在EF Core中执行相同操作的速度要慢6倍,对于我来说,不幸的是,这是我的首选,因为我要处理大量数据,这又使我无法从EF 6过渡到EF Core。

请帮助我解决此问题。

请在下面找到可以在EF 6和EF Core中运行的示例


    private BlogContext _blogContext;

    public void BlogTest()
    {
        _logger.Information("BlogTest started");

        _blogContext = new BlogContext();
        _blogContext.ChangeTracker.AutoDetectChangesEnabled = false; // EF Core
        //_blogContext.Configuration.AutoDetectChangesEnabled = false; // EF 6

        // Add blogs to context
        for (int i = 0; i < 10000; i++)
        {
            _blogContext.Blogs.Add(new Blog { ID = i });
        }

        _logger.Information("BlogTest continued");

        // Loop blogs in context
        for (int i = 1; i < 100000; i++)
        {
            foreach (var blog in _blogContext.Blogs.Local)
            {
            }
        }

        _logger.Information("BlogTest ended");
    }

    public class Blog
    {
        public int ID { get; set; }
    }

    public class BlogContext: DbContext
    {
        public DbSet<Blog> Blogs { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=Blog;Trusted_Connection=True;MultipleActiveResultSets=True;");
        }
    }

2 个答案:

答案 0 :(得分:0)

这可能是帮助here

检查BlogContext模型,EF Core还不支持很多功能。

答案 1 :(得分:0)

此问题已在即将发布的EF Core 3.0中解决

https://github.com/aspnet/EntityFrameworkCore/issues/14231