Как включить только конкретные свойства свойства навигации в запрос по структуре объекта, когда отложенная загрузка отключена? - PullRequest
0 голосов
/ 03 февраля 2019

LazyLoading отключен в моем проекте.Я хочу получить продукт с идентификатором = 1 со свойством навигации по категориям.Но мне нужны только свойства Id и Name категории.Вот почему я хочу, чтобы свойство навигации по категориям имело только эти два поля. Можно ли создать такой запрос?

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; } 
    public dobule Price{ get; set; }
    public string Description { get; set; }
    public bool IsDeleted { get; set; }       
    public DateTime CreatedDate { get; set; }   
    public DateTime ModifiedDate { get; set; }      

    public int CategoryId{ get; set; }
    public Category Category{ get; set; }  
}

public class Category
{
    public int Id { get; set; }
    public string Name { get; set; } 
    public dobule Description{ get; set; }
    public Category IsDeleted { get; set; }       
    public DateTime CreatedDate { get; set; }   
    public DateTime ModifiedDate { get; set; } 
}

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Зависит от того, знаете ли вы, что вы хотите, прежде чем вызывать БД.

  1. Если вы знаете, что знаете, то можете использовать некоторую логику «Включить» или awnser от @Sangman или проверьте документ здесь .

  2. Если у вас уже есть объект в памяти, а затем вы решили загрузить дополнительное свойство навигации.

context.Entry(yourEntity).Reference(a => a.Category).Load();

Дополнительные примеры здесь .

0 голосов
/ 03 февраля 2019

Если вам нужны только несколько конкретных полей, вам нужно будет явно их выбрать.Примерно так будет работать:

dbContext.Products
    .Select(p => new Product
    {
        Id = p.Id,
        Name = p.Name,
        // etc... The fields you need from product go here
        Category = new Category
        {
            Id = p.Category.Id,
            Name = p.Category.Name
        }
    }

Возможно, было бы лучше иметь класс модели Product и Category, который имеет только два поля.Теперь ваш метод будет возвращать объект Category, в котором отсутствуют значения для большинства полей, которые может не ожидать вызывающая сторона.Зависит от того, что именно вы делаете.

...