Как получить все данные из нескольких таблиц, связанных внешними ключами с Entity Framework? - PullRequest
0 голосов
/ 11 апреля 2019

Я новичок в Entity Framework и у меня проблемы с получением всех данных из следующей базы данных:

enter image description here

Я создал контроллеры длявсе сущности, показанные выше, выглядят так:

    // Retrieve entire DB
    AareonAPIDBEntities dbProducts = new AareonAPIDBEntities();

    // Get all customers
    [System.Web.Http.AcceptVerbs("GET")]
    [System.Web.Http.HttpGet]
    [System.Web.Http.Route("customer")]
    public IEnumerable<Customer> Default()
    {
        List<Customer> customers = dbProducts.Customers.ToList();
        return customers;
    }

    //Get customer by ID
    [System.Web.Http.AcceptVerbs("GET")]
    [System.Web.Http.HttpGet]
    [System.Web.Http.Route("customer/{id}")]
    public Customer getById(int id = -1)
    {
        Customer t = dbProducts.Customers
                               .Where(h => h.customerID == id)
                               .FirstOrDefault();
        return t;
    }

Теперь у меня возникают проблемы с поиском, как получить все данные базы данных, связанные внешними ключами в таблице PropertyLeaseContract с помощью customerID.Я пытаюсь получить JSON-ответ, в котором я получаю customersID и значения, в нем массив объектов из связанных LeaseContract и Property.

Надеюсь, что кто-то может помочь.

Заранее спасибо!

1 Ответ

0 голосов
/ 11 апреля 2019

Предполагая, что ваши отношения правильно настроены в Конфигурации DbContext, и у вас есть соответствующие Навигационные Свойства в ваших Классах сущностей, он должен работать примерно так:

public Customer getById(int id = -1)
{
    Customer t = dbProducts.Customers
            .Where(h => h.customerID == id)
            .Include(x => x.PropertyLeaseContracts)
              .ThenInclude(x => x.LeaseContract)
            .Include(x => x.PropertyLeaseContracts)
              .ThenInclude(x => x.Property)
            .FirstOrDefault();
    return t;
}

Чтобы это работало, ваш класс клиента должен иметьСобираем свойство PropertyLeaseContract и устанавливаем как отношение OneToMany.И ваш класс PropertyLeaseContract должен иметь свойства типа LeaseContract и Property, а также быть правильно настроенным.

EDIT: Приведенный выше код работает только в Entity Framework Core, как упомянуто @TanvirArjel.В Entity Framework полный код должен выглядеть примерно так:

public Customer getById(int id = -1)
{
    Customer t = dbProducts.Customers
            .Where(h => h.customerID == id)
            .Include(x => x.PropertyLeaseContracts.Select(plc => plc.LeaseContract))
            .Include(x => x.PropertyLeaseContracts.Select(plc => plc.Property))
            .FirstOrDefault();
    return t;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...