Ядро Entity Framework — значения дочернего класса равны нулю

#c# #entity-framework-core #dbset

#c# #entity-framework-core #dbset

Вопрос:

У меня есть один набор баз данных для всех моих дочерних классов -> базовый класс — EventModel . Когда я пытаюсь загрузить все EventUpdateCartModel (один дочерний класс из EventModel) со всеми данными, дочерние данные всегда равны нулю. Базовые значения доступны как SettingsModel или AccountModel.

** Мой вопрос:**

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

Классы

 public abstract class EventModel
{

 ... Some Other Datas
 public virtual SettingsModel SettingsModel { get; set; }
 public virtual AccountModel AccountModel { get; set; }
}

public class EventUpdateCartModel : EventModel
{
  public virtual UpdateCartDataModel UpdateCartDatas { get; set; }
}

public class UpdateCartDataModel
{
  public long UpdateCartDataId { get; set; }
  public EventUpdateCartType Action { get; set; }  
}

  

DbSet

   public DbSet<EventModel> Events { get; set; }

  

Чтение строк

  var events = context.Events.ToList();
  

null

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

DbSet

  public DbSet<EventUpdateCartModel> Events_UpdateCart{ get; set; }

  

Чтение строк

 var events = context.Events_UpdateCart.ToList();

  

not null

** Мой вопрос:**

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

Я надеюсь, что кто-нибудь сможет мне помочь.

Комментарии:

1. Вы не можете. Почему проблема с объявлением нескольких DbSet в вашем контексте?

2. Это всего лишь вопрос. Это сэкономило бы мне много времени.

Ответ №1:

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

 var events = context.Events_UpdateCart
                .Select(u => new {
                      EventId = u.EventId,
                      EventType = u.EventType
                });
  

Подробнее читайте в документации EF core.