EntityFramework Core - проблема с загрузкой связанных объектов - они не загружаются - PullRequest
0 голосов
/ 05 апреля 2020

Я задавал подобный вопрос, прежде чем относиться к под-связанным сущностям здесь однако в этот вопрос, который я задаю, ни одна из связанных сущностей, о которых я просил, не была включена.

Я использую шаблон репозитория, и одна из базовых сущностей имеет следующее для получения всех сущностей в таблице.

Я также использую отложенную загрузку, где все мои сущности имеют виртуальные для этих связанных сущностей ... например объект клиента выглядит следующим образом.

using System;
using System.Collections.Generic;
using JobsLedger.INTERFACES;

namespace JobsLedger.DATA.ENTITIES
{
#nullable enable
    public class Client : IEntityBase, IAuditedEntityBase
    {
        public Client()
        {
            ClientNotes = new List<Note>();
            Jobs = new List<Job>();
        }

        public string ClientNo { get; set; } = default!;
        public bool Company { get; set; }
        public string? CompanyName { get; set; }
        public string? Abn { get; set; }
        public bool IsWarrantyCompany { set; get; }
        public bool RequiresPartsPayment { set; get; }
        public string? ClientFirstName { get; set; }
        public string ClientLastName { get; set; } = default!;
        public string? Email { get; set; }
        public string? MobilePhone { get; set; }
        public string? Phone { get; set; }
        public string? Address1 { get; set; }
        public string? Address2 { get; set; }
        public string? BankName { get; set; }
        public string? BankBSB { get; set; }
        public string? BankAccount { get; set; }
        public bool Active { get; set; }
        public DateTime? DateDeActivated { get; set; }
        public bool Activity { get; set; }

        // One warranty company client to a job.
        public int? WarrantyCompanyId { get; set; }

        public virtual Job? WarrantyCompany { get; set; }

        // One suburb to a client.
        public int? SuburbId { get; set; }
        public virtual Suburb? Suburb { get; set; }

        // If its a warranty company then we simply link it one to one to the brand id.
        public virtual Brand? Brand { get; set; }

        // Multiple notes for each client.
        public virtual ICollection<Note> ClientNotes { get; set; }

        // Multiple jobs for each client.
        public virtual ICollection<Job> Jobs { get; set; }

        public virtual ICollection<Job> WarrantyCompanyJobs { get; } = default!;
        public int Id { get; set; }
    }
#nullable disable
}

Вот строка в базовом репозитории generi c, которая предполагает загрузку всех клиентов, а также связанных объектов.

    public virtual IQueryable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties)
    {
        IQueryable<T> query = _context.Set<T>();
        return includeProperties.Aggregate(query, (current, includeProperty) => current.Include(includeProperty));
    }

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

Вот строка, которая использует это обобщенное выражение c для загрузки всех клиенты.

        var clients = ClientDATARepository.AllIncluding(s => s.Jobs, s => s.Suburb, s => s.WarrantyCompany);

Идея состоит в том, что его IQueryable загружается только один раз, когда он становится списком объектов (я думаю). Это хорошо, но когда я заставил это быть списком, а затем фактически углубился в результат, у клиента нет никаких рабочих мест, пригорода или гарантийной компании и т. Д. c. То есть НИКАКИЕ связанные сущности не загружаются.

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

        _context.Entry(client).Collection(j => j.Jobs).Load();

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

Что дает. Я мог бы просто выбрать всех клиентов с простым утверждением, если бы я просто хотел, чтобы свойства клиента не включали все свойства связанных сущностей, но я не получаю связанные сущности.

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

Может кто-то понять, почему он не загружает связанные сущности, и помочь мне настроить его так это делает ..

...