Включить Dynami c Entity Framework Core - PullRequest
0 голосов
/ 08 февраля 2020

enter image description here

У меня есть следующие отношения в моей базе данных, у product есть несколько presentaciones_prouduct, и в мой запрос мне нужно включить их, только если оно имеет по крайней мере одну презентацию продукта, для этой цели и создал логический атрибут lista_precios в таблице product, в качестве индикатора это будет обрабатываться внутри.

Сделайте следующий запрос, чтобы включить список, но это занимает много времени, и у меня есть несколько продуктов, которые не нуждаются в этом:

var producto = await _context.Producto
                             .Select(x => new
                                          {
                                              x.Id,
                                              x.Nombre,
                                              x.NombreSecundario,
                                              x.MarcaId,
                                              x.IdCategoria,
                                              x.IdUnidad,
                                              x.Precio,
                                              x.PrecioCompra,
                                              x.Codigo,
                                              x.CantidadInicial,
                                              x.CantidadMinima,
                                              x.ListaPrecios,
                    Include------------>      x.PresentacionesProducto,
                                              x.Descripcion
                             }) 
                             .AsNoTracking()
                             .FirstOrDefaultAsync(x => x.Id== IdProducto);

Теперь я пытаюсь вызвать наименьшие издержки в системе, включая список, если он есть у любого продукта, это динамически

 if (producto.ListaPrecios) {}

Вопрос: Каким образом наиболее эффективная консультация в этом случае будет включать презентации продукта, только если они у вас есть

Ответы [ 2 ]

1 голос
/ 08 февраля 2020

Как насчет этого: x.PresentacionesProducto.Where (p => producto.ListaPre cios)

С вашим кодом:

            var producto = await _context.Producto
                         .Select(x => new
                                      {
                                          x.Id,
                                          x.Nombre,
                                          x.NombreSecundario,
                                          x.MarcaId,
                                          x.IdCategoria,
                                          x.IdUnidad,
                                          x.Precio,
                                          x.PrecioCompra,
                                          x.Codigo,
                                          x.CantidadInicial,
                                          x.CantidadMinima,
                                          x.ListaPrecios,
                                          PresentacionesProducto = x.PresentacionesProducto.Where(p=>producto.ListaPrecios),
                                          x.Descripcion
                         }) 
                         .AsNoTracking()
                         .FirstOrDefaultAsync(x => x.Id== IdProducto);
0 голосов
/ 08 февраля 2020

Во-первых, вы должны получить этот один элемент из db (если он существует), и после загрузки свойства навигации, если необходимо.

Код:

var producto = await _context.Producto
                    .AsNoTracking() //Maybe it is not need
                    .FirstOrDefaultAsync(x => x.Id == IdProducto);

if(producto != null && producto.ListaPrecios)
     _context.Entry<Producto>(producto)
          .Navigation(nameof(producto.PresentacionesProducto))
          .Load();                         
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...