1

여러 테이블에서 데이터를 가져 오는 동안 매우 혼란 스럽습니다. 내 프로젝트에서 MVVM 및 데이터베이스의 첫 번째 접근 방식을 사용하고 있습니다.Entity Framework, 여러 테이블에서 데이터 가져 오기 및 표시 할 열 선택

테이블

My Tables

나는 세 테이블이 다 대다 관계 : 거실, ApartmentRoom 및 아파트.

RoomController

public class ApartmentController : Controller 
{ 
    private readonly IApartmentRepository _apartmentRepository; 

    public ApartmentController(IApartmentRepository apartmentRepository) 
    { 
     _apartmentRepository = apartmentRepository; 
    } 

    //...codes 

    [HttpGet] 
    public ActionResult List() 
    { 
     var apartmentList = _apartmentRepository.GetAll().ToList(); 
     return View(apartmentList); 
    } 

    //...codes 
} 

List.cshtml

<div class="dataTables_wrapper"> 
<table class="table table-bordered table-striped" id="dataTable"> 
    <thead> 
     <tr> 
      <th>Id</th> 
      <th>Door Number</th> 
      <th>Floor Number</th> 
      <th>Capacity</th> 
      <th>Fullness</th> 
      <th>Apartment Name</th> 
      <th></th> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (var item in Model.ToList()) 
     { 
      <tr> 
       <td>@item.Id</td> 
       <td>@item.DoorNumber</td> 
       <td>@item.FloorNumber</td> 
       <td>@item.Capacity</td> 
       <td>@item.Fullness</td> 
       <td>@item.ApartmentRoom.Where(x => x.RoomID == item.Id).Select(x => x.Apartment.ApartmentName)</td> 
       <td> 
        @Html.ActionLink("Düzenle", "Edit", new { id = item.Id }) 
        @Html.ActionLink("Sil", "Delete", new { id = item.Id }) 
       </td> 
      </tr> 
     } 
    </tbody> 
</table> 

내가 방법을 기반으로 구문으로 테이블에 표시 할 필드를 얻기 위해 노력했다 , 그러나 나는 방이 속한 아파트의 이름을 보여줄 수 없었다. 뷰에서

Result Image

결과, 나는 Room 테이블과 Apartment 테이블의 ApartmentName 필드의 모든 필드를 나열합니다. 그 ^^

+0

아마도 dbcontext 설정에서'지연 로딩 금지 '를하거나 자식 테이블 레코드를 얻기 위해'Include' 메소드를 사용해야합니다. –

답변

2
<td>@item.ApartmentRoom.Where(x => x.RoomID == item.Id).Select(x => x.Apartment.ApartmentName)</td> 

그냥 당신이보기에 이상한 출력을 얻고있는 이유입니다, IEnumerable에 객체의 toString. DbSet<Apartment>에서 Include 메서드를 사용하여 관련된 엔티티를로드 한 다음 First을 사용하여 문제의 관련 엔티티를 가져 오려고합니다. System.Data.Entity 네임 스페이스에 람다 식 (context.Apartments.Include(a => a.Rooms))을 포함하는 포함 된 오버로드가 발생합니다.

<td>@item.ApartmentRoom.First(x => x.RoomID == item.Id).ApartmentName</td> 
+0

도움 주셔서 감사합니다. 당신은 내 하루를 저장했습니다 :) – Utku

1
<td>@item.ApartmentRoom.Where(x => x.RoomID == item.Id).Select(x => x.Apartment.ApartmentName).FirstOrDefault()</td> 

당신이 후, 그래서 내가 당신의 논리가 다소 고장이라고 생각하지만 당신은, 실제 항목이 아닌 쿼리를 무엇을 얻을 : 같은

더.

+0

코드가 나를 위해 일했습니다. 당신의 도움을 주셔서 감사합니다. – Utku