Один-ко-многим EF. NET Core Relations не работает - PullRequest
0 голосов
/ 27 мая 2020

У меня есть приложение. net core api, которое включает EF для извлечения данных. Я установил контекст данных, и я могу отображать таблицы из db нормально. Когда я пытаюсь установить отношения, я всегда получаю ноль для вложенного объекта.

У меня есть класс «Возможности», который содержит коллекцию «Примечания»

public class Opportunity
{
    public int Id { get; set; }
    public string Name { get; set; }
    ...
    public decimal FinalDealProfit { get; set; }
    public ICollection<CRMNote> CRMNotes { get; set; }
}

и класс заметок, который ссылается на возможность:

public class CRMNote
{
    public int Id { get; set; }
    public int OpportunityId { get; set; }
    public string Note { get; set; }
    public string User { get; set; }
    public DateTime DateTime { get; set; }
    public string FilePath { get; set; }
    public Opportunity Opportunity { get; set; }
}

В моем класс контекста имеет следующие настройки:

modelBuilder.Entity<Opportunity>(entity =>
  {
    entity.ToTable("CRM_Opportunity");
    entity.HasMany<CRMNote>(n => n.CRMNotes)
      .WithOne(t => t.Opportunity)
      .HasForeignKey(k => k.OpportunityId);
    });

, и я также отображал класс Note:

modelBuilder.Entity<CRMNote>(entity =>
  {
    entity.ToTable("CRM_Note");
    //entity.HasOne<Opportunity>(t => t.Opportunity)
    //    .WithMany(p => p.CRMNotes)
    //    .HasForeignKey(k => k.OpportunityId);
  });

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

Всякий раз, когда я получаю возможность, массив заметок всегда равен нулю. Я попытался поместить пустой конструктор в класс Opportunity:

public Opportunity()
  {
    CRMNotes = new List<CRMNote>();
  }

, но это просто означает, что я получаю пустой массив, а не ноль.

Я не вижу, что я пропустил . Я проверил документы для этого:

https://www.entityframeworktutorial.net/efcore/one-to-many-conventions-entity-framework-core.aspx

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

1 Ответ

1 голос
/ 27 мая 2020

Существует три общих шаблона O / RM, используемых для загрузки связанных данных Активная загрузка, Явная загрузка и Ленивая загрузка

Например, при активной загрузке вы можете использовать:

var opportunities=context.opportunities.Include(opportunity=>opportunity.CRMNotes).ToList()
...