2012-03-25 1 views
67

저는 EntityFramework를 사용하는 새로운 프로젝트에 대한 코드 우선 모델을 선언했습니다.DbQuery.Include()의 오버로드는 어디에서 람다를 사용합니까?

public class BlogEntry 
{ 
    public long Id { get; set; } 
    public long AuthorId { get; set; } 
    public DateTime PublishedStamp { get; set; } 
    public string Title { get; set; } 
    public string Text { get; set; } 

    public virtual User Author { get; set; } 
} 

public class User 
{ 
    public long Id { get; set; } 
    public string Email { get; set; } 
    // ... 
} 

class BlogDb : DbContext 
{ 
    public DbSet<BlogEntry> Entries { get; set; } 
    public DbSet<User> Users { get; set; } 
} 

지금 내가 최근 10 개 블로그 항목을 검색한다고 가정 :

var entries = new BlogDb().Entries.OrderByDescending(...).Take(10).ToList(); 

문제는 지금 entry.Author에 액세스하는 다른 데이터베이스 쿼리를 일으킬 것입니다. 모든 블로그 항목에 대해 이와 같은 별도의 쿼리를 원하지 않을 것입니다. 지금, 그것은 Include의 목적이 바로이 경우이다 나의 이해는, 그래서 내가 말할 수 있습니다

var entries = new BlogDb().Entries.Include(e => e.Author).(...).ToList(); 

그러나,이 방법은 존재하지 않는 것 같습니다.

var entries = new BlogDb().Entries.Include("Author").(...).ToList(); 

하지만 체크 컴파일 타임 아니에요 및 이름 변경 리팩토링에 의해 놓칠 수 있기 때문에이 성가신 :이 경우에만이 같은 Include(string)이다. 분명히 람다 버전은 "올바른"접근법입니다.

그 방법은 어디로 갔습니까? EntityFramework에 더 이상 포함되지 않습니까?

는 (나 자신이를 달성하기 위해 당신이 할 필요가 없습니다. 난 그냥 내가 뭔가를 누락 여부를 알고 싶습니다, 확장 방법을 쓸 수 있다는 것을 알고있다.)

답변

98
using System.Data.Entity;//ftw 

EF v4.1 이상이지만 확장 방법이므로 참조가 필요합니다.


편집(@EastonJamesHarvey 덕분에)

EF 코어를 사용하는 경우 가져 오기는해야한다 :

using Microsoft.EntityFrameworkCore; 
+0

감사합니다! 호기심에서 벗어나 확장 메소드가 아닌 원래 메소드의 또 다른 오버로드가 아닌 이유는 무엇입니까? – Timwi

+0

실제로 lol은 ADO.Net 팀에 대한 질문이 될 수 있습니다. –

+6

LINQ 쿼리의 어느 곳에서나 사용할 수 있도록 IXL은 의 확장 방법입니다. DbQuery 또는 그와 비슷한 경우에만 정의 된 경우 .Where, .OrderBy 등과 같은 다른 메서드를 사용하자 마자이 메서드의 반환 형식이 IQWable 이기 때문에 더 이상 메서드가 표시되지 않습니다. –

관련 문제