简体   繁体   English

实体框架-排序字符串导致“等待操作超时”

[英]Entity Framework - Sorting Strings is causing “The wait operation timed out”

I have the following query that is causing "The wait operation timed out" when I use sorting by Name . 当我使用按Name排序时,我有以下查询导致“等待操作超时”。 How can I make it faster? 我怎样才能使其更快? There are 8.5k rows in the Foods table. Foods表中有8.5k行。

Expression<Func<Food, string>> byName = x => x.FoodTranslations.FirstOrDefault(y => y.Language.Code == CultureInfo.CurrentUICulture.Name).Name;
Expression<Func<Food, string>> byUdsa = x => x.Udsa;

var query = this.DbContext.Foods
            .Where(x => category == null || x.FoodTypeId == category)
            .Where(x => (string.IsNullOrEmpty(name) || x.FoodTranslations.FirstOrDefault(y=>CultureInfo.CurrentUICulture.Name == y.Language.Code).Name.Contains(name)));

        switch (order)
        {
            case 1:
                query = query.OrderBy(byUdsa);
                break;
            default:
                query = query.OrderBy(byName);
                break;
        }

        var result = new JsonFoodIndexResult();
        result.Foods = query.Skip(start)
            .Take(size)
            .Select(x => new JsonFoodIndex
            {
                Name = x.FoodTranslations.FirstOrDefault(y => y.Language.Code == CultureInfo.CurrentUICulture.Name).Name,
                Id = x.Id,
                Udsa = x.Udsa,
                Category = x.FoodType.FoodTypeTranslations.FirstOrDefault(y => y.Language.Code == CultureInfo.CurrentUICulture.Name).Name
            }).ToList();

try 尝试

query = query.AsNoTracking().OrderBy(byName);

Entity framework creates Proxy objects to track changes for each record that is ever retrieved & this creation takes a lot of time.Since,while retreiving, we do not need tracking,you can set it as Off as shown above. 实体框架创建Proxy对象来跟踪每条检索到的记录的更改,并且此创建会花费很多时间。由于在进行检索时,我们不需要跟踪,因此可以将其设置为Off(如上所示)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM