Вызов FirstName из dbo.Employee из внешнего ключа - PullRequest
0 голосов
/ 09 октября 2019

Я хочу вызвать FirstName из моей таблицы Employee с помощью внешнего ключа из таблицы Transaction () и просмотреть его в dataTable при частичном просмотре. Это моя короткая диаграмма БД: DB Diagram

Вот как я называю таблицу данных: индексное представление

<div class="card-body">
        <div class="table-responsive">
            <div id="caTable"></div>
        </div>
</div>

js:

$(function () {
    FetchCashAdvanceTransaction();

});

function FetchCashAdvanceTransaction() {
    var model = $('#caTable');
    $.ajax({
        url: '/Transaction/GetOpenCATransaction',
        contentType: 'application/html ; charset:utf-8',
        type: 'GET',
        dataType: 'html'
    })
        .success(function (result) { model.empty().append(result); })
}

Контроллер

[HttpGet]
public ActionResult GetOpenCATransaction()
{
    using (var context = new dbavlincacctgEntities())
    {
        catransList = context.CATransactions.ToList();                
    }
    return PartialView("_CATransaction", catransList);
}

Частичное представление

<table class="table table-bordered" id="dataTable" style="width:100%" cellspacing="0">
    <thead>
        <tr>
            <th>ID</th>
            <th>CA Number</th>
            <th>Requestor</th>
            <th>Payee</th>
            <th>Total CA Amount</th>
            <th>Status</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
        @if (Model != null)
        {
            foreach (var item in Model)
            {
                <tr>
                    <td>@item.TransID</td>
                    <td>@item.TransactionNumber</td>
                    <td>@item.RequestorID</td>
                    <td>@item.Payee</td>
                    <td>@item.TotalAmount</td>
                    <td>@item.Status</td>
                    <td><button class="btn btn-primary">View</button> <button class="btn btn-danger">Delete</button></td>
                </tr>
            }
        }
    </tbody>
</table>

Этот код отображает целое значение RequestorID (очевидно, так как я вызываю его из модели). Я понятия не имею, как отобразить FirstName из другой модели с помощью FK. Я использовал EF6, если это помогает. Спасибо!

Ответы [ 3 ]

1 голос
/ 09 октября 2019

Хорошо. Я понял это сейчас. Спасибо Ковиду Пурохиту за то, что он дал мне идеи. Это было решено

public partial class Employee
{
  public <DataType> EmpID {get; set;}
  public <DataType> FirstName {get; set;}
  public <DataType> LastName {get; set;}
}
public partial class Requestor
{
  public <DataType> RequestorID {get; set;}
  public <DataType> EmpID {get; set;}

  public virtual Employee Employee {get; set;}
}
public partial class Transaction
{
  public <DataType> TransID {get; set;}
  public <DataType>  RequestorID {get; set;}
  public <DataType> Amount {get; set;}
  public <DataType> TransType {get; set;}

  public virtual Requestor Requestor{get; set;}
}

Контроллер:

[HttpGet]
public ActionResult GetOpenCATransaction()
{
    using (var context = new dbavlincacctgEntities())
    {
        catransList = context.CATransactions.ToList();                
    }
    return PartialView("_CATransaction", catransList);
}

Частичное представление:

<tbody>
        @if (Model != null)
        {
            foreach (var item in Model)
            {
                <tr>
                    <td>@item.TransID</td>
                    <td>@item.TransactionNumber</td>
                    <td>@item.Requestor.Employee.Firstname</td>
                    <td>@item.Payee</td>
                    <td>@item.TotalAmount</td>
                    <td>@item.Status</td>
                    <td><button class="btn btn-primary">View</button> <button class="btn btn-danger">Delete</button></td>
                </tr>
            }
        }
</tbody>
1 голос
/ 09 октября 2019
  1. Вам нужно изменить модель, чтобы включить в нее поля из Employee - объявите модель представления.
  2. В зависимости от того, как настроены объекты, вы можете запрашивать и извлекать данныеот связанных сущностей либо напрямую (отношение внешнего ключа), либо косвенно путем извлечения связанных сущностей и выполнения Join себя в LINQ.

Посмотрите на Загрузка связанных сущностей EF , в частности, Явнаяраздел загрузки, из которого вы можете использовать метод Collection или Reference, в зависимости от настроек вашей организации .

Наконец, вы также можете присоединиться к данным, если в ваших классах сущностей нет поддержки.

Как только данные содержат информацию о сотруднике, это относительно тривиальнопокажите его, и похоже, что вы уже знаете, как это сделать.

0 голосов
/ 09 октября 2019

Вы можете сделать это напрямую, используя соединения LINQ

var firstName=(from trans in context.CATransactions join req in context.Requestor on trans.RequestorID equals req.RequestorId join emp in context.employees on req.EmpID equals emp.EmpId Select new {emp.FirstName} ).ToList();

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

public class Employee
{
  public <DataType> EmpID {get; set;}
  public <DataType> FirstName {get; set;}
  public <DataType> LastName {get; set;}
}
public class Requestor
{
  public <DataType> RequestorID {get; set;}
  public Employee EmpID {get; set;}
}
public class Transaction
{
  public <DataType> TransID {get; set;}
  public Requestor  RequestorID {get; set;}
  public <DataType> Amount {get; set;}
  public <DataType> TransType {get; set;}

}

Так что после реализации этого вы можете запросить

var data=context.CATransactions.Select(a=>a.RequestorID.EmpID.FirstName).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...