Как динамически указать сущность для извлечения данных с помощью EntityFramework? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть список поиска сущностей, который называется Стандарты.Например, «Страны», «ProductTypes», «PortofEntry», «Вредители» и т. Д. ... Назначение этих объектов заключается в использовании сторонними поставщиками, а целью является создание одной конечной точки веб-API для использования, в которой поставщик будет указывать требуемый стандарт иответом будет список JSON.

Для бэкэнда я использую EntityFramework 6, и здесь я немного застрял, когда пытаюсь получить данные, и выполнение занимает много времени.

public Response<IEnumerable<dynamic>> GetStandardsByName(string name)
{
            Type standardType = typeof(eCertModel).Assembly.DefinedTypes.SingleOrDefault(p=> p.Name == name);

            if (standardType == null)
            {
                return new Response<IEnumerable<object>>
                {
                    IsSuccessful = false,
                    Message = "Not a valid standard",
                    Data = null
                };
            }

            **dynamic standardData = _db.Set(standardType).ToListAsync().Result;**

            return new Response<IEnumerable<dynamic>>
            {
                Data = standardData,
                IsSuccessful = true,
                Message = $"Standard '{name}' returned successfully!"
            };
        }

Есть лилучший способ я могу сделать это?Причина, по которой я не хочу иметь разные конечные точки, заключается в том, что мне приходится обслуживать все 52 стандарта, которые сложно поддерживать.И, кажется, это может быть вызов ToListAsync , который является единственным доступным.И да, я начал использовать async-await, но это было более хлопотно, от контроллера до этого метода, все приложение зависло ...

1 Ответ

1 голос
/ 23 апреля 2019

Нет необходимости возиться с Dynamic. Просто измените тип возврата вашего контроллера на HttpResponseMessage , сериализуйте данные ответа и отправьте их клиенту самостоятельно. Вы отказываетесь от полезного форматирования сообщений, имея контроллер, который возвращает множество различных форм данных, поэтому нет причин не указывать ответное сообщение HTTP напрямую.

Конечно, «причина, по которой я не хочу иметь разные конечные точки, - это то, что мне придется обслуживать все 52 стандарта, которые беспорядочно поддерживать» - не очень хорошая причина. Вы можете легко сгенерировать контроллеры.

...