Как получить связанные сущности в одной в Entity Framework Core?

111
12 февраля 2022, 00:30

только знакомлюсь с EF Core, так что не судите строго. Вообщем, у меня есть такая простенькая схема моего кластера.

Тут ClientId, CustomerId, ItemId просто ссылочные ключи.

Сама сущность выглядит так:

public class Order
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int OrderId { get; set; }
    public DateTime Time { get; set; }
    [ForeignKey("ClientId")]
    public Client Client { get; set; }
    [ForeignKey("CustomerId")]
    public Customer Customer { get; set; }
    [ForeignKey("ItemId")]
    public Item Item { get; set; }
}

Так что по сути тут я должен (как я думаю) получать сущность Order, где все свойства инициализированы:

using (OrdersContext c = new OrdersContext())
{
    await Task.Factory.StartNew(new Action(() =>
    {
        orders = c.Orders.Find(11);
    }));
}

Но в итоге я получаю это:

Рабочий код вот, если что:

Так вот, у меня вопрос. Должен ли мне EF Core при подобном обращении к таблице-сущности (у которой есть ссылки ещё на другие сущности) возвращать инициализированные сущности в себе? Если что, в таблицах есть все записи, на которые ссылаются эти ключи в таблице Orders.

Answer 1

Вы можете включить LazyLoading либо явно сделать .Include() необходимых сущностей. Поищите информацию по LazyLoading, из того, что сам отвечал нашёл такую ссылку: Как использовать колекции в Entity Framework Core?

В целом я бы рекомендовал в вашем случае использовать Include:

 return await c.Orders.Include(x => x.Customer).Include(x => x.Client).FindAsync(11);

А если я хочу вытащить ещё и в свойстве-сущности что-то

Не уверен, что правильно понял, но вот вам пример. Если бы у вас на диаграмме была бы у заказа к Company и у Company был бы MainPhone в отдельной сущности Phones то вы могли бы получить order с клиентами и телефонами так:

await c.Orders.Include(x => x.Company.MainPhone).Where(...

Вообще, я вам рекомендую почитать вот этот учебник по EF Core: https://metanit.com/sharp/entityframeworkcore/ -- там много ответов на достаточно простые вопросы по азам EF. Просто прочитайте его от начала до конца, постепенно разбирая все примеры.

READ ALSO
Xamarin чтение внедренного текстового файла

Xamarin чтение внедренного текстового файла

Есть коллекция в текстовом файлеПрикрепил её к приложению и пытаюсь прочитать

131
C#, Условия заполнения матриц

C#, Условия заполнения матриц

[![введите сюда описание изображения][1]][1]Есть 14 вариантов матрицы, для каждого варианта нужно придумать условия по которому матрица будет...

88
Работа windows form

Работа windows form

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

155
Распознавание прав доступа в Windows forms

Распознавание прав доступа в Windows forms

Как в Windows forms можно отличить обычный запуск программы от запуска с правами администратора?

85