MVC에서 탐색 속성이 작동하는 방식에 대해 약간 혼란 스럽습니다. Entity Framework 탐색 속성보기에 대한 설명
이의이 코드를 살펴 보자 :var messages = db.messages // .Include("user_reciever").Include("user_sender")
.Where(M => M.receiver_id == _User.id && M.delete_code != 1)
.OrderByDescending(M => M.timestamp);
return View(messages.ToList());
내가 포함 그래서 필드 "user_reciever"와 "user_sender"를 제외 포함되어 있지 않습니다.
@foreach (var item in Model)
{
var tr_style = item.message_read == false ? "font-weight:bold" : "";
<tr style="@tr_style">
<td>
<input type="checkbox" name="MessageIds" id="MessageIds" value="@item.id"/>
</td>
<td>
@Html.DisplayFor(modelItem => item.message_read)
</td>
<td>
@Html.ActionLink(item.user_sender.username, "Overview", "User", new { username = item.user_sender.username }, null)
</td>
<td>
@Html.ActionLink(item.subject, "Details", new { id = item.id })
</td>
<td>
@Html.DisplayFor(modelItem => item.timestamp)
</td>
</tr>
}
</table>
공지 사항이 코드를 사용하고 방법 : 사용자 이름 = item.user_sender.username은, 그러나, 나는 DB에서 "user_sender"를 포함하지 않았다
하지만, 내보기에,이이 요구.
이 코드가 없어도이 코드는 여전히 작동합니다. 그게 정확, A는 문을 결합 사용하여 DB를 호출하여
탐색 속성 일 :
그래서 내 질문은?
item.user_sender.username과 같은 탐색 속성을 사용할 때 별도의 DB 호출이 필요합니까? 즉 foreach가 각 항목에 대해 DB를 호출하는 것입니다. 맞습니까?
위의 코드에서 모든 foreach 항목에 대해 DB를 호출합니까? .Include ("user_reciever"). Include ("user_sender")를 추가하면 모든 foreach 항목에 대해 Db를 호출하지 않을 것입니까? (모든 항목이 이미 하나의 db join 문으로 미리로드되어 있기 때문에 아니오라고 추측합니다)
이 코드를 실행하는 효과적인 방법입니까? 나는 다른 테이블에서 사용자 이름이 들어있는 사용자 메시지를 표시하지 않습니다. 사용자 Sender_id, Reciever_id를 사용하여 보낸 사람과 수신자를 확인합니다.
감사합니다.