Соедините две таблицы в одну таблицу, чтобы изменить идентификаторы по именам - PullRequest
0 голосов
/ 29 апреля 2019

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

У меня есть 3 таблицы с запросами.

Основная таблица для перечисления запросов в таблице, которая является запросами. У меня также есть таблица RequestState, которая может быть в состоянии ожидания, одобрена или отклонена, и таблица RequestType, которая может быть медицинским отпуском, праздниками и т. Д. *

Запрос таблицы:

  • RequestID
  • Тема
  • Описание
  • StartDate
  • EndDate
  • TypeId
  • StateId
  • UserId

Таблица RequestStates

  • StateId (ForeignKey TableRequest)
  • Имя (Ожидает, Утверждено и т. Д.)

Таблица RequestType

  • TypeId (ForeignKey TableRequest)
  • Имя (Отпуск, Отпуск ...)

Я работаю с asp.net mvc и angularJs. С EntityFramework я делаю запросы к списку с angularJS.

Итак, я хочу перечислить в html-таблице Список таблиц запросов, который я покажу вам на изображении с TypeId и StateId. Но я хочу показать имя TypeID и StateId вместо числа.

В моем запросе EntityFramework, что мне нужно сделать? Присоединиться?

Это код для получения всех PendingRequests, он вернет json с ключами, которые находятся в таблице Requests. Но я хочу изменить или использовать что-то в запросе, чтобы получить имена других таблиц (RequestState и RequestType) вместо идентификаторов.

 public JsonResult GetAllPendingRequests()
    {
        var data = "";
        using (CiberbitHolidayMgmt bd = new CiberbitHolidayMgmt())
        {           
            bd.Configuration.LazyLoadingEnabled = false;

            var pendingRequests = bd.Requests.Where(a => a.StateId == 1);

            data = JsonConvert.SerializeObject(pendingRequests, Formatting.None,
                    new JsonSerializerSettings()
                    {
                        ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                    });
        }
        return new JsonResult { Data = data, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }

Код о повторении ng и JavaScript, где у меня есть запрос http

<tbody>
      <tr ng-repeat =" a in getPendingRequests">
          <td>{{a.TypeId}}</td>
          <td>{{a.StartDate}} - {{a.EndDate}}</td>
          <td>{{a.Requested}} days</td>
          <td>{{a.StateId}}</td>
          <td><a href="@Url.Action("Details", "Request")"><i class="fas fa-info-circle "></i></a></td>
      </tr>
  </tbody>


 function getAllPendingRequests() {
        $http({
            method: 'GET',
            url: '/Request/GetAllPendingRequests',
        })
        .then(function (data) {
            data.data = JSON.parse(data.data);
            $scope.getAllPendingRequests = data.data;

            console.log($scope.getAllPendingRequests);

        }, function (data) {
            alert("error");
        });
    }

Html Таблица со списком запросов [EntityFramework модель с таблицами] [2]

В основном я хочу отображать имена, а не идентификаторы в html-таблице о состоянии и запросе типа, и я думаю, что мне нужен запрос EntityFramework с соединениями. Спасибо!

UPDATE

Это изображение с запросом, который я сделал!

Я выбираю из разных таблиц, сопоставляю идентификаторы и создаю объект!

запрос

1 Ответ

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

Это не вопрос html или angularjs.

Вам необходимо выполнить запрос с EntityFramework и вернуть правильные данные (имена RequestState и RequestType вместо идентификаторов).

Сначала вынеобходимо установить правильные сопоставления сущностей:

В сопоставлении сущностей таблицы Request добавить виртуальные свойства для RequestState и RequestType, например:

public virtual ICollection<RequestState> RequestStates { get; set; }
public virtual ICollection<RequestType> RequestTypes { get; set; }

Затем в классы RequestState и RequestType добавитьвиртуальное свойство класса Request выглядит следующим образом:

public virtual ICollection<Request> Categories { get; set; }

Теперь вы сможете выполнить запрос следующим образом:

var allRequests = db.Request.Where(r => r.TypeId == reqTypeId)
                  .SelectMany(r => r.Request);

Где в результате для каждого объектав allRequests вы получите такие свойства, как r.RequestStates.Name и r.RequestTypes.Name

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...