좋아, 성능을 위해 EF를 다시 테스트하고 데이터베이스에서 간단한 결과를 얻고 싶습니다.Entity Framework에서 테이블을 조인하지 못하게하려면 어떻게합니까?
예
var jobsList = from j in mf.Jobs
where j.UserID == 1001 select new { Job = j };
이 불행하게도 내가 EF는하고 싶지 않아이 목록에 내 사용자 개체를 결합한다. 관계가 있기 때문에 EF에 가입하지 말라고 어떻게 말합니까? 기본적으로 나는 그 테이블에서 간단한 행을 원한다.
아니면 다른 유형의 검색을 사용해야합니까? 나는 여전히 데이터베이스 검색의 기본 유형을 아래에서 사용하고 있으며 db 작업을 더 잘 처리 할 수있는 방법이 있다고 생각합니다. 내가 좀 더 명확 맥락에서 말하고 기본적으로 무엇을
SqlConnection myconnection = new SqlConnection();
편집
. 그것은 단지 다음을 얻는 것이 아닙니다.
Job.JobID
Job.UserID
//Extra properties
나는 사용자 개체가 쉽게 필요한보다 훨씬 더 많은 메모리를 소비하는
Job.JobID
Job.UserID
Job.User
//Extra properties
을 가져, 게다가 나는 그것을 필요하지 않습니다.
내 솔루션
그래서 난 아직도 왜 여기에 너무 많은 EF 믿고 있지 않다. LazyLoading을 해제하고 켜기 만하면 성능 차이가 너무 많이 나는 것을 눈치 채지 못했습니다. 그런 다음 SqlConnection 형식 메서드가 내 EF 메서드와 비교하여 사용하는 데이터의 양을 비교했습니다.
정확히 동일한 결과 세트가 반환되며 여기에는 성능 차이가 있습니다.
내 Entity Framework 메서드의 경우 작업 목록이 반환됩니다.
MyDataEntities mf = new MyDataEntities(); // 4MB for the connection...really?
mf.ContextOptions.LazyLoadingEnabled = false;
// 9MB for the list below
var test = from j in mf.Jobs
where j.UserID == 1031
select j;
foreach (Job job in test) {
Console.WriteLine(job.JobID);
}
Stored Proc를 실행하고 결과 집합을 반환하는 내 SqlConnection 메서드의 경우.
//356 KB for the connection and the EXACT same list.
List<MyCustomDataSource.Jobs> myJobs = MyCustomDataSource.Jobs.GetJobs(1031);
나는 완전히 엔티티 프레임 워크는 방법 표준도록 SqlConnection보다 훨씬 더 많이하고있는 것을 이해하지만, 왜 결과 세트에 대한 25 배 더 많은 메모리의 최소 걸릴 것입니다 경우이 모든 과대 광고. 그냥 가치가없는 것 같습니다.
내 솔루션은 결국 EF와 함께 가지 않습니다.
생성 된 SQL의 모양은 어떻습니까? – Magnus
느린 로딩이 활성화되어 있습니까? 그렇지 않은 경우 사용자 속성을 열망하기 때문에 조인이 될 수 있습니다. –
"이 불행히도 내 사용자 개체를이 목록에 조인"한다는 것은 무엇을 의미합니까? – JotaBe