Ошибка метода AsNoTracking в операторе linq - PullRequest
0 голосов
/ 04 марта 2019

Ниже приведен мой запрос на получение информации из базы данных.С точки зрения производительности, я хочу использовать AsNoTracking метод для моих сущностей.

var teamrole = (from role in _context.USERROLEs.AsNoTracking()
    from team in _context.TEAMROLEs.AsNoTracking().Where(x => x.ID == role.ROLEID).DefaultIfEmpty()
    from queue in _context.WORKQUEUEs.AsNoTracking().Where(x => x.ID == team.QUEID).DefaultIfEmpty()
    where team.ROLECD == roleCode
    select new { team, queue }).ToList();

Вот мой контекст выглядит так:

public partial class MyContext : DbContext
{
    public MyContext() : base("MyContext")
    {
        Configuration.ProxyCreationEnabled = false;
        Database.SetInitializer<MyContext>(null);
    }

    public virtual DbSet<ZTEAMROLE> ZTEAMROLEs { get; set; }    
    //Some other entities here...
}

Сущности:

[Table("TEAMROLE")]
public partial class TEAMROLE
{
    [StringLength(36)]
    public string ID { get; set; }  

    [StringLength(36)]
    public string QUEID { get; set; }

    //More Properties...
}

Ошибка, возникающая при выполнении запроса teamrole

Метод System.Data.Entity.Infrastructure.DbQuery'1[XXX.Entities.TEAMROLE] AsNoTracking(), объявленный для типа System.Data.Entity.Infrastructure.DbQuery'1[XXX.Entities.TEAMROLE], нельзя вызвать с экземпляром типа System.Data.Entity.Core.Objects.ObjectQuery'1[XXX.Entities.TEAMROLE]

1 Ответ

0 голосов
/ 04 марта 2019

Вы должны вызывать .AsNoTracking только один раз на запрос, а не на каждый DbSet<T>:

var teamrole = (from role in _context.USERROLEs
    from team in _context.TEAMROLEs.Where(x => x.ID == role.ROLEID).DefaultIfEmpty()
    from queue in _context.WORKQUEUEs.Where(x => x.ID == team.QUEID).DefaultIfEmpty()
    where team.ROLECD == roleCode
    select new { team, queue })
    .AsNoTracking()
    .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...