Entity Framework 6 및 DbContext
을 사용하고 있습니다. 루프에서이 레코드를 사용하기 위해 데이터베이스에서로드 레코드를 열망합니다. 예제로 설명하고 싶습니다. (예를 들어 현실 세계에서는 비현실적입니다.)Entity Framework DbContext 메모리로 레코드를로드하는 방법을 열망하는 방법
저는 학생 목록을 보여주는 DataGridView
이 있습니다. Student
테이블에서 모든 레코드의 열은 favorite_subject_id
입니다.
DataGridView
에서 각 학생의 기록을 보여주는 동안
Subject
테이블에서 주체 이름을 표시 할 학생의
favorite_subject_id
(의 그들 사이에 데이터베이스 관계가없는 가정 해 봅시다. 나는 그것이 실제 프로젝트에 있어야 알고있다. 그러나 그것은 단지 내 질문을 삭제하는 예입니다)
으로는 첫째, 나는 다음과 같은 코드로이 개념 개발 :.
foreach (DataGridViewRow row in gridView.Rows)
{
if (!row.IsNewRow)
{
var student = (Student)(row.DataBoundItem);
var favorite_subject = dbContext.Subjects.find(student.favorite_subject_id);
row.Cells[colFs.Index].Value = favorite_subject.subject_name.ToString();
}
}
을하지만이 코드 구현은 모든 학생 기록에 대한 데이터베이스를 터치합니다. 성능이 저하됩니다.
그래서 루프 전에 메모리에 과목 레코드를 열망하길 원합니다. 루프에서, 나는 열망하는로드 된 레코드를 메모리에서 검색하려고합니다. 문제는 내가 메모리에 레코드를 열심히로드하는 것이 가장 적합한 방법인지 알지 못한다는 것입니다.
이 목적을 위해 몇 가지 코드를 작성했습니다. 그러나 그것이 올바른지 여부는 확실하지 않습니다.
var lstSubjects = dbContext.Subjects.ToList<Subject>();
foreach (DataGridViewRow row in gridView.Rows)
{
if (!row.IsNewRow)
{
var student = (Student)(row.DataBoundItem);
var favorite_subject= lstSubjects .Find(x => x.subject_id == student.favorite_subject_id);
row.Cells[colFs.Index].Value = favorite_subject.subject_name.ToString();
}
}
그래서 질문은 메모리에 데이터베이스의 기록 (DbContext
를 사용하여) 열망 부하에 가장 좋은 방법은 무엇입니까?
그렇다면 'dbContext.Students.Include (x => x.FavoriteSubject)'여야합니다. –
학생 개체의 subject 엔터티에 해당하는 탐색 속성의 이름은 무엇이든됩니다 .i는 Subject라고 가정합니다. – Jags
그는'favorite_subject.subject_name' 다음에 있습니다. 그래서 내가 말하고자하는 것은 네비게이션 속성 (있는 경우)이 컬렉션 대신 하나의 객체를 가리킨다는 것입니다. –