IQueryable <> не работает, если не отлаживать и не нажимать запрос и ResultsView в Locals. Что вызвало бы это? - PullRequest
1 голос
/ 05 апреля 2020

У меня есть сущность ResumeBank, которая содержит список сущностей Resume. Резюме имеет список принадлежащих лиц.

В моем DBContext:

public DbSet<ResumeBank> ResumeBanks { get; set; }

public DbSet<Resume> BankResumes { get; set; }

и в OnModelCreating ():

    modelBuilder.Entity<Resume>().OwnsMany(s => s.ResumeCategories, a =>
    {
        a.Property<DateTime>("CreatedDate");
        a.Property<DateTime>("UpdatedDate");
        a.ToTable("ResumeCategories");
    });

Теперь в моем классе Respository для ResumeBank У меня есть следующее:

public async Task<ResumeBank> GetResumeBankAsync(int resumeBankID)
{
    IQueryable<ResumeBank> query = ResumeBankContext.ResumeBanks
                                                .Include(c => c.Resumes)
                                                .Include(d => d.ResumeCategories);

    query = query.Where(c => c.Id == resumeBankID);

    return await query.FirstOrDefaultAsync();
}

Самое странное, что когда я запускаю его без точки останова, он вызывает исключение при вызове FirstOrDefaultAsyn c (). Однако, если я поставлю точку останова и когда она будет нажата, я go войду в свои местные жители windows и нажму на query.ResultsView, чтобы развернуть ее, а затем нажать Продолжить, она работает !!

Почему?

Также другой факт: если я закомментирую OwnsMany () в OnModelCreating () в DBContext, у меня не возникнет этой проблемы.

Я использую EntityFrameworkCare 3

enter image description here

Исключение составляет:

JobAssist.Services.ResumeBankMgmt.Infrastructure.Repositories.ResumeBankRepository: Information: Getting a ResumeBank for 1
'iisexpress.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.3\System.Diagnostics.StackTrace.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'iisexpress.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.3\System.Reflection.Metadata.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
Exception thrown: 'System.NotSupportedException' in System.Private.CoreLib.dll
Exception thrown: 'System.NotSupportedException' in System.Private.CoreLib.dll
Exception thrown: 'System.NotSupportedException' in System.Private.CoreLib.dll
Microsoft.AspNetCore.Mvc.Infrastructure.ObjectResultExecutor: Information: Executing ObjectResult, writing value of type 'System.String'.
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker: Information: Executed action JobAssist.Services.ResumeBankMgmt.API.Controllers.ResumeBankController.AddResumeAsync (JobAssist.Services.ResumeBankMgmt.API) in 7012.4078ms
Microsoft.AspNetCore.Routing.EndpointMiddleware: Information: Executed endpoint 'JobAssist.Services.ResumeBankMgmt.API.Controllers.ResumeBankController.AddResumeAsync (JobAssist.Services.ResumeBankMgmt.API)'
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request finished in 7155.7843ms 400 application/json; charset=utf-8

Также как еще один фрагмент головоломки:

Если в GetResumeBankAsyn c () i есть:

    IQueryable<ResumeBank> query = ResumeBankContext.ResumeBanks;
    //.Include(c => c.Resumes)
    //.Include(d => d.ResumeCategories);

    query = query.Where(c => c.Id == resumeBankID);

    return await query.FirstOrDefaultAsync();

это работает.

Вот модели:

    public class ResumeBank : Entity, IAggregateRoot
    {
        // JobSeeker ID
        public int JobSeekerID { get; private set; }

        // List of Resumes
        private readonly List<Resume> _resumes;

        public IEnumerable<Resume> Resumes => _resumes.AsReadOnly();

        // List of Resume Bank
        private readonly List<ResumeCategory> _resumeCategories;

        public IEnumerable<ResumeCategory> ResumeCategories => _resumeCategories.AsReadOnly();
       }

    public class Resume : Entity
    {
        public string ResumeName { get; private set; }
        public string FileLocation { get; private set; }

        private readonly List<ResumeCategory> _categories;
        public IEnumerable<ResumeCategory> ResumeCategories => _categories.AsReadOnly();
     }

    public class ResumeCategory : ValueObject
    {
        public string CategoryName { get; private set; }
    }

1 Ответ

0 голосов
/ 06 апреля 2020

Я считаю, что ошибка связана с вашей Resume моделью. _categories не является допустимым именем для вспомогательного поля свойства ResumeCategories. В соответствии с документами у вас есть два варианта: обновить действительное имя вспомогательного поля (например, _resumeCategories) или явно указать имя поля в конфигурации:

modelBuilder.Entity<Resume>()
    .Property(b => b.ResumeCategories)
    .HasField("_categories");
...